Swing 按鈕默認使用 `ButtonUI` (如 `BasicButtonUI`/`MetalButtonUI`),在 `paint` 方法中根據 `ButtonModel` 狀態 (ROLLOVER, PRESSED, ARMED) 繪製背景。**UI 委托會覆蓋組件設置的背景色**。
btn.setContentAreaFilled(false); // 禁用 UI 默認背景填充
btn.setOpaque(false); // 組件透明
btn.setBackground(new Color(0, 0, 255, 50)); // 半透明藍
// 需重寫 paintComponent 繪製自定義背景
@Override protected void paintComponent(Graphics g) {
g.setColor(getBackground());
g.fillRect(0, 0, getWidth(), getHeight());
super.paintComponent(g); // 繪制文本/圖標
}
btn.setUI(new BasicButtonUI() {
@Override protected void paintButtonPressed(Graphics g, AbstractButton b) {
// 懸浮/按下不改變背景,或自定義繪製
}
});
btn.setRolloverIcon(new ImageIcon(...)); // 懸浮圖標
btn.setRolloverEnabled(true);