歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> 解決 GTK+/GNOME 3 環境下 Java Swing 程序使用本地 GTK+ 主題時菜單無邊框 bug 的方法

解決 GTK+/GNOME 3 環境下 Java Swing 程序使用本地 GTK+ 主題時菜單無邊框 bug 的方法

日期:2017/3/1 9:11:06   编辑:Linux編程

在 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 主題這種情況,也可以采用上述方法來解決。

Copyright © Linux教程網 All Rights Reserved