WindowStateListenerpublic 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);
}
}
| 介面 | 事件 | 典型用途 |
|---|---|---|
WindowListener | opened/closing/closed/iconified/deiconified/activated/deactivated | 關閉確認、資源釋放 |
WindowStateListener | windowStateChanged | 最小化/最大化/全螢幕切換 |
WindowFocusListener | gained/lost focus | 暫停/恢復動畫、自動保存 |
setDefaultCloseOperation(
JFrame.EXIT_ON_CLOSE // 退出 JVM(主視窗適用)
JFrame.DISPOSE_ON_CLOSE // 釋放資源,不退出 JVM(子視窗適用)
JFrame.HIDE_ON_CLOSE // 僅隱藏
JFrame.DO_NOTHING_ON_CLOSE // 完全自定(需配合 WindowListener)
);
SwingUtilities.invokeLater(() -> new MyFrame())setIconImage(Toolkit.getDefaultToolkit().getImage("icon.png"))setMinimumSize(new Dimension(200,150))-Dsun.java2d.uiScale=2