開發 Java 桌面應用時,視窗置中是基礎且關鍵的使用者體驗細節。本文將從座標計算邏輯出發,詳解如何利用 AWT Toolkit 動態獲取螢幕解析度,實現跨平台、跨解析度的視窗完美置中。
假設螢幕解析度 800x600,視窗大小 200x200。螢幕中心點為 (400, 300)。為使視窗中心與螢幕中心重合,視窗左上角座標應設為:
X = 螢幕寬/2 - 視窗寬/2 = 400 - 100 = 300
Y = 螢幕高/2 - 視窗高/2 = 300 - 100 = 200
由於使用者執行環境的螢幕尺寸不固定,必須在執行期動態獲取。java.awt.Toolkit 提供了跨平台的解決方案:
// 一行程式碼獲取螢幕尺寸 Dimension 物件
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
int screenWidth = screenSize.width;
int screenHeight = screenSize.height;
import javax.swing.*;
import java.awt.*;
public class CenterFrameDemo {
public static void main(String[] args) {
JFrame frame = new JFrame("置中視窗範例");
frame.setSize(400, 300); // 設定視窗大小
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 1. 獲取螢幕尺寸
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
// 2. 獲取視窗尺寸
Dimension frameSize = frame.getSize();
// 3. 計算左上角座標
int x = (screenSize.width - frameSize.width) / 2;
int y = (screenSize.height - frameSize.height) / 2;
// 4. 設定位置並顯示
frame.setLocation(x, y);
frame.setVisible(true);
}
}
自 JDK 1.4 起,JFrame 內建 setLocationRelativeTo(null) 方法,一行即可完成置中,內部原理相同,建議優先使用:
frame.setLocationRelativeTo(null); // null 代表相對螢幕置中
掌握螢幕尺寸動態獲取與座標換算邏輯,不僅能解決視窗置中問題,更能舉一反三應用於彈出對話框、工具提示等 UI 定位場景。現代開發建議直接使用 setLocationRelativeTo(null),簡潔且不易出錯。