Swing基础知识整理

  • 格式:docx
  • 大小:202.56 KB
  • 文档页数:19

1

Swing组件

一、顶级容器组件

1:框架(JFrame)

框架(JFrame)是一个图形界面的主窗口,由边框、标题栏、最大化、最小化、还原、移动、关闭按钮、系统菜单,以及内容窗格组成。

内容窗格是框架的核心区域,主要的图形界面组件、菜单栏、工具栏都在内容窗格中。

框架是一个程序的主窗口,每个具有图形界面的程序都至少要有一个框架,如果程序中还有其他窗口,并且这些窗口依赖于框架的,则应使用对话框(JDialog),如果要使其它窗口显示在框架的内部,则应该使用内部框架(JInternalFrame),内部框架是专用容器组件不是顶级容器组件。

创建一个JFrame对象JFrame frame = new JFrame();

方法名 效果 使用

Pack() 根据窗口里面的布局及组件的preferedSize来确定frame的最佳大小 frame.pack()

setTitle() 设置标题名,它显示在框架的标题栏上 frame.setTitle(String s)

setVisible() true值:显示框架;false值:框架不显示 frame.setVisible(Boolean b)

setBounds() 可实现setSize,

setLocation这两个函数的功能 public void setBounds(int x, int y, int width,

int height);

setIconImage() 设置图标 String imgURL = “myicon.gif”;

ImageIcon icon = new ImageIcon(imgURL);

Frame.setIconImage(icon.getImage());

setDefaultCloseOperation() 将关闭窗口操作设为退出程序 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

getContentPane() 获得内容窗格 JPanel contentPane;

contentPane = frame.getContentPane();

在框架中加入组件 JPanel panel1 = new JPanel();

contentPane.add(panel1);

panel1.add(new JLabel("点击下面的按钮:"));

panel1.add(new JButton("关闭"));

setJMenuBar 设定主程序中的菜单JMenuBar menuBar = new JMenuBar(); 2

栏 frame.setJMenuBar(menuBar);

setLocationRelativeTo 将框架放到屏幕上一个现有的组件旁边 public void

setLocationRelativeTo(Component c);

其中c是一个已经在屏幕上显示的组件

如果函数参数为null,那么就将框架居中放置,这是常用的一种将窗口居中放置的方法

2、对话框(JDialog)

 消息框:显示一条消息

 选择框:让用户进行选择

 文件选择框:选择文件进行打开、保存等操作

 颜色选择框:从调色板中选择颜色

每个对话框都必须依附于框架

下面主要介绍V5.0用到的通用对话框(JDialog)和消息框(JOptionPane):

通用对话框(JDialog)

例:在主框架程序中添加一个通用对话框,里面有一个文字标签和一个按钮:

public void showDialog(){

JDialog dialog = new JDialog(this,”对话框”);

JPanel panel = new JPanel();

Dialog.getContentPane().add(panel);

panel.add(new JLabel(“这是一个对话框。”));

panel.add(new JButton(“点击”));

dialog.pack();

dialog.setVisible(true);

}

对话框分为有模式的和无模式的两种类型:

有模式的对话框在显示时,将屏蔽用户向对话框所属的主框架键入的所有内容,用户不能对主框架进行任何操作。

无模式对话框在显示时,用户仍然可以用鼠标点击主框架,在主框架里输入内容,或移动主框架。

缺省的JDialog对话框都是无模式对话框。

如果要创建有模式对话框,可以在构造函数里增加一项如下:

JDialog dialog = new JDialog(this, "对话框", true);

也可以用setModal函数来设置对话框是有模式的还是无模式的:

dialog.setModal(true); // 将对话框设置成有模式的

dialog.setModal(false); // 将对话框设置成无模式的

消息框(JOptionPane)

弹出一个提示消息框:

JOptionPane.showMessageDialog(frame,”这是一条提示信息”);

– 常用消息框的调用:

– 消息框:利用静态函数showMessageDialog显示

– 确认框:利用静态函数showConfirmDialog显示

– 选择框:利用静态函数showOptionDialog显示 3

– 输入框:利用静态函数showInputDialog显示

showMessageDialog是一个静态成员函数,可以从类直接调用,它有三种形式:

1、static void JOptionPane.showMessageDialog(Component

parentComponent, Object message)

2、static void JOptionPane.showMessageDialog(Component

parentComponent, Object message, String title,

int messageType)

3、static void JOptionPane.showMessageDialog(Component

parentComponent, Object message, String title,

int messageType, Icon icon)

int messageType:消息框类型,有下列值:

错误消息: JOptionPane.ERROR_MESSAGE

普通消息: RMATION_MESSAGE

警告消息: JOptionPane.WARNING_MESSAGE

疑问消息: JOptionPane.QUESTION_MESSAGE

无格式消息:JOptionPane.PLAIN_MESSAGE

showConfirmDialog是一个静态成员函数,可以从类直接调用:

JOptionPane.showConfirmDialog (frame,

”你真的要删除文件吗?”,

“删除文件”,

JOptionPane.YES_NO_OPTION);//或者是三个按钮JOptionPane.YES_NO_CANCEL_OPTION

3、父窗口与子窗口的层次关系

关于子窗体的层级关系总结:

假设有这样两个窗体:RootWindow,SubWindow,在RootWindow中引发某事件而显示SubWindow

1,如果弹出窗体(比如SubWindow)仅仅是调用Show方法,并且没有设置其Owner属性:

ClassRootWindow

{ void Foo() 4

{

SubWindow sw = newSubWindow();

sw.Show();

}

}

那么弹出窗体(SubWindow)和源窗体(如RootWindow)没有任何层级关系,也就是说不会以模态方式呈现(SubWindow不会阻挡用户对RootWindow的操作)。SubWindow在Show出来时在RootWindow的上方,但用户可以通过鼠标点击等方式将RootWindow带到SubWindow前方来而遮盖RootWindow的内容,也就是说,享有用户焦点的窗口将被带到最前方。并且RootWindow和SubWindow的最小化与还原操作互不影响。

2,如果弹出窗体(比如SubWindow)调用Show方法,并且设置了其Owner属性:

ClassRootWindow

{

void Foo()

{

SubWindow sw = newSubWindow();

sw.Owner = this;

sw.Show();

}

}

那么弹出窗体(SubWindow)和源窗体(如RootWindow)将有着父子关系,也就是说,弹出窗体将永远在源窗体的上方,但并不是模式的,用户可以操作源窗体,当源窗体被最小化或还原的时候,弹出窗体也将随着最小化和还原,反之不成立。

3,如果弹出窗体(SubWindow)以ShowDialog的方式显示,并且没有设置其Owner属性:

ClassRootWindow

{

voidFoo()

{

SubWindow sw = new SubWindow();

sw.ShowDialog();

}

}

弹出窗体将以模式的方式出现,但没有父子关系,弹出窗体将阻止用户对源窗体的操作,但点击源窗体时弹出窗体不会出现闪动效果。弹出窗体最小化时,源窗体会随之最小化,但还原操作却不可以(很奇怪)。这里有一个值得注意的问题是:在此模式下,如果弹出窗体不在任务栏显示(ShowInTaskBar==false),而源窗体显示在任务栏,用户的操作可能会导致弹出窗口被隐藏在源窗口背后而没办法切换出来(除非使用Alt+TAB)。

4,如果弹出窗体(SubWindow)以ShowDialog的方式显示,并且设置了其Owner属性:

Class RootWindow

{

void Foo()

{

SubWindow sw = newSubWindow();