在 Java Swing 應用開發中,創建透明或半透明的對話框(JDialog)能顯著提升 UI 體驗。本文介紹基於 com.sun.awt.AWTUtilities 的經典實現方案。
com.sun.awt.AWTUtilities 類(屬於 JDK 內部 API,JDK 9+ 需添加模組導出)AWTUtilities.setWindowOpaque(this, false)import com.sun.awt.AWTUtilities;
import javax.swing.JDialog;
public class TransparentDialog extends JDialog {
public TransparentDialog() {
// 關鍵設置:將窗體設置為非不透明
AWTUtilities.setWindowOpaque(this, false);
// 建議同時設置無邊框與背景透明
setUndecorated(true);
setBackground(new java.awt.Color(0, 0, 0, 0)); // 完全透明背景
// 其他初始化...
setSize(400, 300);
setLocationRelativeTo(null);
}
}
--add-exports java.desktop/com.sun.awt=ALL-UNNAMEDWindow.setOpacity(float) 和 Window.setBackground(Color) 標準 API 實現透明效果,無需依賴內部類setOpaque(false)),否則會出現白色方塊優先使用標準 API(setOpacity/setBackground)實現透明效果,僅在維護舊代碼或特殊需求下使用 AWTUtilities。結合無邊框窗體(setUndecorated(true))可創建極具現代感的懸浮對話框、通知氣泡等 UI 效果。