javax.swing包中的常用组件:
—容器组件
JFrame(框架)
JDialog(多窗体程序以及窗体间传递数据)
JPanel(面板)
JScrollPane(滚动面板)
—文本组件
JLabel、JTextField、JPasswordField、JTextArea
—表单组件
JButton
JCheckBox
JRadioButton和ButtonGroup
JComboBox
javax.swing.JDialog
1.JDialog用于在程序中创建对话框组件,对于多窗口的程序而言,对话框尤为重要
2.对话框其实就是轻量级的窗体,它比JFrame消耗更少的系统资源。
3.它与JFrame的区别在于,JFrame可以在程序中不依赖于其他窗体单独存在,而JDialog则必须依赖于其他窗体,一般是做辅助窗口呈现。
4.更重要的是,JDialog支持模式显示
5.所谓模式显示,是指窗口以不丢失焦点的独占方式显示。
JDialog常用的构造函数:
//创建一个没有标题并且没有指定所有者的无模式对话框
JDialog()
//创建一个没有标题但指定owner作为其所有者的无模式对话框
JDialog(Frame owner)
//创建一个没有标题但有指定所有者的对话框,根据参数modal来决定他是否模式显示
JDialog(Frame owner, boolean modal)
//创建一个具有指定标题和指定所有者的无模式对话框
JDialog(Frame owner, String title)
//创建一个指定标题和指定所有者的对话框,参数modal决定是否模式显示
JDialog(Frame owner, String title, boolean modal)
//创建一个没有标题但有指定所有者的对话框,根据参数modal来决定它是否模式显示
JDialog(Dialog owner, boolean modal)
除了模式显示的功能外,JDialog的使用跟JFrame很相似,以下是一些常用的方法:
//设置对话框标题,标题内容由参数title指定
void setTitle(String title)
//设置对话框的大小,由参数width指定宽度,参数height指定高度
void setSize(int width, int height)
//设置对话框能否调整大小,由参数resizable决定
void setResizable(boolean resizable)
//设置对话框是否可见
void setVisible(boolean b)
//获得对话框的内容面板
Container getContentPane()
//释放当前对话框及其所有子组件所占用的资源,即卸载对话框
void dispose()
下面通过一个案例来深入体会JDialog,先来看看效果图:
上图表示用户点击"显示子窗口"出现一个对话框,然后用户在对话框中输入名字,点击"确定"之后,对话框会关闭,名字就会显示在主窗口中。
程序源码:
/**
* 测试JDialog
* @author Liao
*
*/
public class JDialogTest extends JFrame{
private static final long serialVersionUID = 1L;
//定义标签
public JLabel jLabel;
//定义显示子窗口的按钮
private JButton showSubWindow;
//在构造函数中初始化组件
public JDialogTest(){
//创建标签
jLabel = new JLabel("请输入您的名字");
//创建按钮
showSubWindow = new JButton("显示子窗口");
//设置布局为BorderLayout,可以不设置,因为窗体默认是BorderLayout
this.setLayout(new BorderLayout());
//把组件添加到窗体中
this.add(jLabel, BorderLayout.NORTH);
this.add(showSubWindow, BorderLayout.SOUTH);
//设置按钮的监听事件
showSubWindow.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
//我们在另外一个类中显示子窗口,只要把主类中的上下文参数传过去即可
new SubWindow(JDialogTest.this);
}
});
//设置窗体的基本属性
this.setSize(500, 500);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLocationRelativeTo(null);
this.setVisible(true);
}
public static void main(String[] args) {
new JDialogTest();
}
}
子窗口程序:
public class SubWindow extends JDialog{
private static final long serialVersionUID = 1L;
//定义文本输入框
private JTextField jTextField;
//定义确定按钮
private JButton jbt;
//无参构造函数
public SubWindow() {
}
//在构造函数中初始化组件
public SubWindow(final JDialogTest context) {
//创建文本输入框
jTextField = new JTextField();
//创建按钮
jbt = new JButton("确定");
//设置布局管理器,可以不写,因为JDialog和窗体差不多,默认都是BorderLayout
this.setLayout(new BorderLayout());
//把组件添加到JDialog中
this.add(jTextField, BorderLayout.NORTH);
this.add(jbt, BorderLayout.SOUTH);
//设置按钮的监听事件
jbt.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
//获取用户输入
String name = jTextField.getText();
//把名字写到主窗体的标签中
context.jLabel.setText("您的名字是:" + name);
//关闭子窗口
SubWindow.this.setVisible(false);
//setVisible(false);
}
});
//设置JDialog的基本属性
this.setSize(300, 200);
this.setTitle("输入");
this.setResizable(false);
this.setVisible(true);
}
}
注:上述程序的思想很好,就好比我们在写android程序时那样,把当前类的上下文参数传到另外一个界面中。