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);
- }
- }