歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

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

在 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