在開發跨平台的 Java 桌面應用時,為了讓介面風格與原生系統保持一致,Java 提供了 java.awt.SystemColor 類。它封裝了系統當前的桌面顏色設定,開發者可直接讀取這些靜態常數,無需手動初始化。
SystemColor 的所有顏色值會在類載入時自動初始化,並作為 static 成員暴露。開發者只需直接讀取感興趣的成員即可,例如:
Color background = SystemColor.window; // 視窗背景色
Color textColor = SystemColor.windowText; // 視窗文字色
Color highlight = SystemColor.textHighlight; // 文字選取高亮色
| 常數名稱 | 用途說明 |
|---|---|
desktop | 桌面背景色 |
activeCaption | 活動視窗標題欄背景 |
activeCaptionText | 活動視窗標題文字色 |
activeCaptionBorder | 活動視窗標題邊框色 |
inactiveCaption | 非活動視窗標題欄背景 |
inactiveCaptionText | 非活動視窗標題文字色 |
inactiveCaptionBorder | 非活動視窗標題邊框色 |
window | 視窗內部背景色 |
windowBorder | 視窗邊框色 |
windowText | 視窗內部文字色 |
menu | 選單背景色 |
menuText | 選單文字色 |
text | 文字編輯區背景色 |
textText | 文字編輯區文字色 |
textHighlight | 文字選取高亮背景 |
textHighlightText | 文字選取高亮文字色 |
textInactiveText | 非活動文字色 |
control | 控制元件背景色(按鈕等) |
controlText | 控制元件文字色 |
controlHighlight | 控制元件高亮色 |
controlLtHighlight | 控制元件淡高亮色 |
controlShadow | 控制元件陰影色 |
controlDkShadow | 控制元件深陰影色 |
scrollbar | 捲軸背景色 |
info | 工具提示/說明背景色 |
infoText | 工具提示/說明文字色 |
import java.awt.*;
import javax.swing.*;
public class SystemColorDemo {
public static void main(String[] args) {
JFrame frame = new JFrame("SystemColor Demo");
frame.setLayout(new GridLayout(0, 2));
// 列出所有系統顏色
for (Field f : SystemColor.class.getDeclaredFields()) {
if (f.getType() == Color.class) {
try {
Color c = (Color) f.get(null);
JLabel nameLabel = new JLabel(f.getName());
JLabel colorLabel = new JLabel(" ");
colorLabel.setOpaque(true);
colorLabel.setBackground(c);
colorLabel.setBorder(BorderFactory.createLineBorder(Color.GRAY));
frame.add(nameLabel);
frame.add(colorLabel);
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
}
frame.pack();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
SystemColor 常數為 final static,僅供讀取,不可賦值。善用 SystemColor 可讓 Java 應用自動適應使用者的系統外觀設定,提升原生體驗。開發時只需記住核心常數名稱(window, control, text 等),即可輕鬆套用系統色系。