首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 程式設計入門

Java Swing JFrame 視窗監聽與建立完整實作:狀態變化、元件佈局

     編輯:Java 程式設計入門

視窗狀態監聽 WindowStateListener

public class WinFrame extends JFrame {
    public WinFrame() {
        setTitle("視窗狀態示範");
        setSize(300, 300);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setLocationRelativeTo(null); // 置中

        addWindowStateListener(e -> {
            int state = e.getNewState();
            if ((state & Frame.ICONIFIED) != 0) 
                System.out.println("最小化");
            else if ((state & Frame.MAXIMIZED_BOTH) != 0) 
                System.out.println("最大化");
            else if (state == Frame.NORMAL) 
                System.out.println("還原/正常");
        });

        setVisible(true);
    }
    public static void main(String[] args) { new WinFrame(); }
}

關鍵點: 使用位元運算 & 判斷狀態,因視窗可同時處於多種狀態(如最大化+聚焦)。

基本視窗建立與佈局

public class SimpleFrame {
    public static void main(String[] args) {
        JFrame frame = new JFrame("標題");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(400, 300);
        frame.setLocationRelativeTo(null);

        JPanel panel = new JPanel(new BorderLayout());
        JTextArea area = new JTextArea("內容區域");
        area.setLineWrap(true);
        panel.add(new JScrollPane(area), BorderLayout.CENTER);

        frame.add(panel);
        frame.setVisible(true);
    }
}

常用視窗事件監聽器

介面事件典型用途
WindowListeneropened/closing/closed/iconified/deiconified/activated/deactivated關閉確認、資源釋放
WindowStateListenerwindowStateChanged最小化/最大化/全螢幕切換
WindowFocusListenergained/lost focus暫停/恢復動畫、自動保存

關閉操作選項

setDefaultCloseOperation(
    JFrame.EXIT_ON_CLOSE      // 退出 JVM(主視窗適用)
    JFrame.DISPOSE_ON_CLOSE   // 釋放資源,不退出 JVM(子視窗適用)
    JFrame.HIDE_ON_CLOSE      // 僅隱藏
    JFrame.DO_NOTHING_ON_CLOSE // 完全自定(需配合 WindowListener)
);

最佳實踐清單

  • 所有 Swing 操作在 EDT 執行:SwingUtilities.invokeLater(() -> new MyFrame())
  • 視窗圖示:setIconImage(Toolkit.getDefaultToolkit().getImage("icon.png"))
  • 最小/最大尺寸限制:setMinimumSize(new Dimension(200,150))
  • 高 DPI 相容:JDK 9+ 自動支援,舊版需 -Dsun.java2d.uiScale=2
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved