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

时间: 2025-01-06 00:54:17

解决 GTK+/GNOME 3 环境下 Java Swing 程序使用本地 GTK+ 主题时菜单无边框 bug 的方法的相关文章

生产环境下JAVA进程高CPU占用故障排查

问题描述:生产环境下的某台tomcat7服务器,在刚发布时的时候一切都很正常,在运行一段时间后就出现CPU占用很高的问题,基本上是负载一天比一天高. 问题分析:1,程序属于CPU密集型,和开发沟通过,排除此类情况.2,程序代码有问题,出现死循环,可能性极大. 问题解决:1,开发那边无法排查代码某个模块有问题,从日志上也无法分析得出.2,记得原来通过strace跟踪的方法解决了一台PHP服务器CPU占用高的问题,但是通过这种方法无效,经过google搜索,发现可以通过下面的方法进行解决,那就尝试下

解决在iOS8环境下,当用户关闭定位服务总开关时,无法将APP定位子选项加入定位权限列表的问题

关键点:- (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status代理方法 iOS7环境下当APP首次调用startUpdatingLocation方法开启定位服务时,系统会自动将该APP的定位子选项加入设置中的定位权限列表,并弹框提示用户是否为该APP定位服务授权. 可是在iOS8环境下,使用定位服务的方式较之前版本发生改变,调用s

基于HBase Hadoop 分布式集群环境下的MapReduce程序开发

HBase分布式集群环境搭建成功后,连续4.5天实验客户端Map/Reduce程序开发,这方面的代码网上多得是,写个测试代码非常容易,可是真正运行起来可说是历经挫折.下面就是我最终调通并让程序在集群上运行起来的一些经验教训. 一.首先说一下我的环境: 1,集群的环境配置请见这篇博文. 2,开发客户机环境:操作系统是CentOS6.5,JDK版本是1.7.0-60,开发工具是Eclipse(原始安装是从google的ADT网站下载的ADT专用开发环境,后来加装了Java企业开发的工具,启动Flas

vs2012环境下,应用程序无法正常启动0xc000007b

今天在编译程序的时候,需要切换32位和64位,分别编译版本. 当前运行环境是64位,转编译32位,编译通过,但是启动却产生这样的错误(从32位直接转换为64位,也是出现同样的错误): 解决办法很简单,关闭当前的vs,重新启动解决方案,就ok了. 注意:每次切换编译环境,编译通过后,都需要重启vs. vs2012环境下,应用程序无法正常启动0xc000007b

Ubuntu图形界面环境下启动应该程序:

1.先说下Ubuntu14.04系统开机紫框的问题: Grub theme:黑色屏幕出现紫色边框 There's a minor typo on the grub theme which produces a black screen with purple border before the grub menu is drawn and on Plymouth start. AIUI, there's a `!` (negation) missing before the background

CentOS环境下Java开发环境的搭建

------------------------------------------------------- 安装Jdk 1.查询系统默认JDK CentOS系统默认会安装JDK,一般建议卸载后安装自己所需要的Jdk版本 查询系统是否已安装Jdk用如下查询命令: #rpm -qa |grep java #rpm -qa |grep jdk #rpm -qa |grep gcj(GCJ: The GNU Compiler for Java,GNU环境下的Java编译器,我们要Sun的) 查询当前

Mac环境下 Java服务器环境搭建

Mac环境下,Java服务器环境搭建: 1  使用吧比较新的JDK 下载地址: http://download.oracle.com/otn-pub/java/jdk/8u25-b17/jdk-8u25-macosx-x64.dmg 2  下载Tomcat压缩包(这里使用version_7.xx) 3 下载Eclipse 的Tomcat插件,解压后把文件添加到eclipse文件中plugins目录中: (2.3步骤中的工具下载地址:http://down.51cto.com/data/18883

解决在VMware vSAN环境下安装嵌套ESXI出错的故障

很多情况下在现有的VMware vSphere条件下通过嵌套的方式安装ESXI主机,再进行相关的实验和操作是个和便捷的方式.但是在vSAN环境下,直接在ESXI上安装嵌套的ESXI,在最后的按F11开始安装时,会出现以下报错 为了解决这个问题,需要在当前的物理ESXI系统上,开始SSH连接到ESXI系统并运行以下命令即可esxcli system settings advanced set -o /VSAN/FakeSCSIReservations -i 1 原文地址:http://blog.5

ojdbc在linux环境下 java.sql.SQLRecoverableException: IO Error: Connection reset 的问题

开门见山,最快捷的解决方案:java -Djava.security.egd=file:///dev/urandom  -jar  xxxxxxx.jar 描述下问题:写了个jar工具,用到了连接池,ojdbc.windows环境一起正常.linux环境下启动关闭两三次后就出现 java.sql.SQLRecoverableException: IO 错误: Connection reset 查看配置文件和解析问题, 无果. 更换hikari到druid,无果. 使用最新ojdbc包,无果. 无