首页 > 学院 > 开发设计 > 正文

Swing 中设置模态窗体和启动位置

2019-11-18 15:36:42
字体:
来源:转载
供稿:网友

关于 Modal 窗体

    在 Swing 中只有 JDialog 可以设置为 Modal 窗体,其方法可以在构造函数(例如“JDialog(Frame owner, boolean modal)”)中传参数,也可以用 setModal(boolean b) 方法设定,

这个方法是从 Dialog 类继续的。

    在 JFrame 类中,无法通过如 JDialog 的方法设置 Modal 窗体,在 CSDN 有朋友尝试通过在 windowDeiconified() 时 requestFocus() 来模拟 Modal 窗体,代码如下:


Swing 中设置模态窗体和启动位置(图一)Swing 中设置模态窗体和启动位置(图二)public class MyModalFrame extends JFrame implements WindowListener ...{
Swing 中设置模态窗体和启动位置(图三)    PRivate JFrame frame = null;
Swing 中设置模态窗体和启动位置(图三)    private boolean modal = false;
Swing 中设置模态窗体和启动位置(图三)    private String title = null;
Swing 中设置模态窗体和启动位置(图三)
Swing 中设置模态窗体和启动位置(图四)Swing 中设置模态窗体和启动位置(图五)    public MyModalFrame() ...{
Swing 中设置模态窗体和启动位置(图三)        this(null, false);
Swing 中设置模态窗体和启动位置(图六)    }
Swing 中设置模态窗体和启动位置(图三)
Swing 中设置模态窗体和启动位置(图四)Swing 中设置模态窗体和启动位置(图五)    public MyModalFrame(JFrame frame) ...{
Swing 中设置模态窗体和启动位置(图三)        this(frame, false);
Swing 中设置模态窗体和启动位置(图六)    }
Swing 中设置模态窗体和启动位置(图三)
Swing 中设置模态窗体和启动位置(图四)Swing 中设置模态窗体和启动位置(图五)    public MyModalFrame(JFrame frame, boolean modal) ...{
Swing 中设置模态窗体和启动位置(图三)        this(frame, modal, "");
Swing 中设置模态窗体和启动位置(图六)    }
Swing 中设置模态窗体和启动位置(图三)
Swing 中设置模态窗体和启动位置(图四)Swing 中设置模态窗体和启动位置(图五)    public MyModalFrame(JFrame frame, boolean modal, String title) ...{
Swing 中设置模态窗体和启动位置(图三)        super(title);
Swing 中设置模态窗体和启动位置(图三)        this.frame = frame;
Swing 中设置模态窗体和启动位置(图三)        this.modal = modal;
Swing 中设置模态窗体和启动位置(图三)        this.title = title;
Swing 中设置模态窗体和启动位置(图三)        this.init();
Swing 中设置模态窗体和启动位置(图六)    }
Swing 中设置模态窗体和启动位置(图三)
Swing 中设置模态窗体和启动位置(图四)Swing 中设置模态窗体和启动位置(图五)    private void init() ...{
Swing 中设置模态窗体和启动位置(图三)        if(modal)
Swing 中设置模态窗体和启动位置(图三)            frame.setEnabled(false);
Swing 中设置模态窗体和启动位置(图三)        this.addWindowListener(this);
Swing 中设置模态窗体和启动位置(图六)    }
Swing 中设置模态窗体和启动位置(图三)
Swing 中设置模态窗体和启动位置(图四)Swing 中设置模态窗体和启动位置(图五)    public void windowOpened(WindowEvent windowEvent) ...{
Swing 中设置模态窗体和启动位置(图六)    }
Swing 中设置模态窗体和启动位置(图三)
Swing 中设置模态窗体和启动位置(图四)Swing 中设置模态窗体和启动位置(图五)    public void windowClosing(WindowEvent windowEvent) ...{
Swing 中设置模态窗体和启动位置(图三)        if(modal)
Swing 中设置模态窗体和启动位置(图三)            frame.setEnabled(true);
Swing 中设置模态窗体和启动位置(图六)    }
Swing 中设置模态窗体和启动位置(图三)
Swing 中设置模态窗体和启动位置(图四)Swing 中设置模态窗体和启动位置(图五)    public void windowClosed(WindowEvent windowEvent) ...{
Swing 中设置模态窗体和启动位置(图六)    }
Swing 中设置模态窗体和启动位置(图三)
Swing 中设置模态窗体和启动位置(图四)Swing 中设置模态窗体和启动位置(图五)    public void windowIconified(WindowEvent windowEvent) ...{
Swing 中设置模态窗体和启动位置(图六)    }
Swing 中设置模态窗体和启动位置(图三)
Swing 中设置模态窗体和启动位置(图四)Swing 中设置模态窗体和启动位置(图五)    public void windowDeiconified(WindowEvent windowEvent) ...{
Swing 中设置模态窗体和启动位置(图六)    }
Swing 中设置模态窗体和启动位置(图三)
Swing 中设置模态窗体和启动位置(图四)Swing 中设置模态窗体和启动位置(图五)    public void windowActivated(WindowEvent windowEvent) ...{
Swing 中设置模态窗体和启动位置(图六)    }
Swing 中设置模态窗体和启动位置(图三)
Swing 中设置模态窗体和启动位置(图四)Swing 中设置模态窗体和启动位置(图五)    public void windowDeactivated(WindowEvent windowEvent) ...{
Swing 中设置模态窗体和启动位置(图三)        if(modal)
Swing 中设置模态窗体和启动位置(图三)            this.requestFocus();
Swing 中设置模态窗体和启动位置(图六)    }
Swing 中设置模态窗体和启动位置(图七)}

关于窗体启动位置

    有时候想要让窗体启动后在屏幕中间启动,有种比较复杂的方法:

Swing 中设置模态窗体和启动位置(图八)Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
Swing 中设置模态窗体和启动位置(图八)Dimension size = frame.getSize();
Swing 中设置模态窗体和启动位置(图八)int x = (screenSize.width - size.width) / 2;
Swing 中设置模态窗体和启动位置(图八)int y = (screenSize.height - size.height) / 2;
Swing 中设置模态窗体和启动位置(图八)frame.setLocation( x, y );

    在 java 1.4 版之后可以用一条语句代替:

Swing 中设置模态窗体和启动位置(图八)frame.setLocationRelativeTo(null);



发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表