解决 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 主题这种情况,也可以采用上述方法来解决。

posted @ 2016-10-04 20:21  小侠猫猫球  阅读(956)  评论(0编辑  收藏  举报