熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java核心技術 >> 正文

Swing 中設置模態窗體和啟動位置

2022-06-13   來源: Java核心技術 

  關於 Modal 窗體

    在 Swing 中只有 JDialog 可以設置為 Modal 窗體其方法可以在構造函數(例如JDialog(Frame owner boolean modal))中傳參數也可以用 setModal(boolean b) 方法設定這個方法是從 Dialog 類繼承的

    在 JFrame 類中無法通過如 JDialog 的方法設置 Modal 窗體在 CSDN 有朋友嘗試通過在 windowDeiconified() 時 requestFocus() 來模擬 Modal 窗體代碼如下




public class MyModalFrame extends JFrame implements WindowListener {
    private JFrame frame = null;
    private boolean modal = false;
    private String title = null;

    public MyModalFrame() {
        this(null false);
    }

    public MyModalFrame(JFrame frame) {
        this(frame false);
    }

    public MyModalFrame(JFrame frame boolean modal) {
        this(frame modal );
    }

    public MyModalFrame(JFrame frame boolean modal String title) {
        super(title);
        thisframe = frame;
        thismodal = modal;
        thistitle = title;
        thisinit();
    }

    private void init() {
        if(modal)
            framesetEnabled(false);
        thisaddWindowListener(this);
    }

    public void windowOpened(WindowEvent windowEvent) {
    }

    public void windowClosing(WindowEvent windowEvent) {
        if(modal)
            framesetEnabled(true);
    }

    public void windowClosed(WindowEvent windowEvent) {
    }

    public void windowIconified(WindowEvent windowEvent) {
    }

    public void windowDeiconified(WindowEvent windowEvent) {
    }

    public void windowActivated(WindowEvent windowEvent) {
    }

    public void windowDeactivated(WindowEvent windowEvent) {
        if(modal)
            thisrequestFocus();
    }
}
關於窗體啟動位置

    有時候想要讓窗體啟動後在屏幕中間啟動有種比較復雜的方法



Dimension screenSize = ToolkitgetDefaultToolkit()getScreenSize();
Dimension size = framegetSize();
int x = (screenSizewidth  sizewidth) / ;
int y = (screenSizeheight  sizeheight) / ;
framesetLocation( x y );
    在 Java 版之後可以用一條語句代替



framesetLocationRelativeTo(null);

  Java API 文檔中對此方法描述如下public void setLocationRelativeTo(Component c)
設置此窗口相對於指定組件的位置如果此組件當前未顯示或者 c 為 null則此窗口位於屏幕的中央如果該組件的底部在視線以外則將該窗口放置在 Component 最接近窗口中心的一側因此如果 Component 在屏幕的右部則 Window 將被放置在左部反之亦然

    在應用此方法時應該注意的一點是setSize() 方法一定要放在 setLocationRelativeTo() 之前否則只有窗體左上角是正對屏幕或所屬組件中心整個窗體看起來會是偏向右下角的


From:http://tw.wingwit.com/Article/program/Java/hx/201311/26857.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.