在 GTK+/GNOME 3 環境下采用默認的 Adwaita 主題時,Java Swing 程序如果使用本地 GTK+ 主題會出現菜單無邊框的 bug,這個問題也可能在其他常用的 GTK+ 主題中出現。說這是 Java Swing 的 bug 還是 GTK+/GNOME 3 的主題(如 Adwaita)的 bug 其實意義不是太大。這裡給出一個簡單的解決辦法,其思路是修改 GTK+/GNOME 3 的主題,這裡以系統默認的 Adwaita 主題為例:
Adwaita 主題文件位於 /usr/share/themes/Adwaita 目錄下,其中包含 gtk-2.0、gtk-3.0、qt 等幾個子目錄,我們要修改的是 gtk-2.0 子目錄中的主題配置文件。進入 /usr/share/themes/Adwaita/gtk-2.0 目錄,編輯 main.rc 文件,找到“style "menu" {”這一行(大概是第1520 行),將 xthickness 及 ythickness 設置為:
xthickness = 1
ythickness = 1
然後在下面增加如下內容:
engine "pixmap" {
image {
function = BOX
file = "assets/line.png"
}
}
上述修改後,style "menu" 部分看起來應該類似下面這樣:
style "menu" {
xthickness = 1
ythickness = 1
bg[NORMAL] = @base_color
bg[INSENSITIVE] = @base_color
bg[PRELIGHT] = @base_color
bg[SELECTED] = @selected_bg_color
engine "pixmap" {
image {
function = BOX
file = "assets/line.png"
}
}
}
然後再找到“style "separator_menu_item" {”這一行,將其修改為如下內容:
style "separator_menu_item" {
xthickness = 1
ythickness = 1
engine "pixmap" {
image {
function = BOX
file = "assets/line.png"
}
}
}
修改完後保存 main.rc,重新啟用 Adwaita 主題生效後,就會發現 Java Swing 程序使用 GTK+ 主題後菜單邊框終於正常出現啦。對於其他 GTK+/GNOME 3 主題如果出現類似 Adwaita 主題這種情況,也可以采用上述方法來解決。