如何让Java应用程序使用GTK+主题?

有没有办法让Java应用程序使用我的GTK主题?

1KDE/Qt的类似问题:http://askubuntu.com/questions/6948/how-to-run-java-application-in-kde-with-qt-like-ui - Mechanical snail
相关链接:http://askubuntu.com/questions/162571/is-there-a-way-to-specify-a-global-look-and-feel-for-swing-apps - Mechanical snail
3个回答

你可以尝试将Java的默认外观设置为GTK:
打开终端(Ctrl + Alt + T),然后粘贴上面的命令来打开openjdk,或者粘贴下面的命令来打开sun java。
gksu gedit /usr/lib/jvm/java-6-openjdk/jre/lib/swing.properties
gksu gedit /usr/lib/jvm/java-6-sun/jre/lib/swing.properties
  • 按照文件中的注释,去掉井号,使其看起来像这样:

    # 取消注释以将默认外观设置为GTK
    swing.defaultlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel
    
  • 保存并重新启动Java应用程序。

之前和之后:


1没有修好,但对我来说仍然非常有用 :) 谢谢! - RolandiXor
2谢谢。我将这个作为提示使用,但实际上用了UIManager.setLookAndFeel("com.sun.java.swing.plaf.gtk.GTKLookAndFeel"); 这样的代码,它不需要任何配置文件编辑。 - xconspirisist
@RolandiXor 如果这不起作用,那意味着应用程序的开发人员将外观和感觉硬编码了。除非它是开源的,否则您无法做任何事情。 :( - jobukkit
1它帮助我解决了“jdk粗体字体”错误。谢谢。 - MInner
在Ubuntu Mate 14上没有修复Universal Media Server。 - NicolasSmith
在Ubuntu Mate上没有结果,即使使用OpenJDK Java 8策略工具也不行,我不相信它是硬编码的... - Franko
swing.properties文件似乎被忽略了(open-jdk 8和openjdk-11),即使您在其中设置了swing.crossplatformlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel(这似乎是正确的变量设置)。在您的环境中设置_JAVA_OPTIONS(参见下文)似乎更有希望。 - ChrisAga

如果您已经尝试了上述解决方案,可以尝试使用以下方法(在Xfce上对我有帮助):
  1. export _JAVA_OPTIONS='-Dawt.useSystemAAFontSettings=on -Dswing.aatext=true -Dswing.defaultlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel -Dswing.crossplatformlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel'

  2. 然后在终端中启动您的应用程序。

  3. 如果您满意结果,请将此行添加到您的~/.profile文件中。

1将以下内容放入~/.profile对我没有起作用,但是我将_JAVA_OPTIONS="-Dawt.useSystemAAFontSettings=on -Dswing.aatext=true -Dswing.defaultlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel -Dswing.crossplatformlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel" 放入/etc/environment(请注意使用双引号而不是单引号,并且缺少export,否则无法生效)。 - Photon
与SweetHome3D和Ubuntu 18.04兼容正常。 - NicolasSmith
非常感谢您的帮助。如果有人正在经历与我类似的Swing应用程序崩溃问题,请考虑移除最后一个选项Dswing.crossplatformlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel - Puspam

如果您是开发人员或者这是一个开源项目,另一种方法是改变应用程序的外观和感觉。在main方法中插入以下代码。
for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
    if ("com.sun.java.swing.plaf.gtk.GTKLookAndFeel".equals(info.getClassName())) {   
       javax.swing.UIManager.setLookAndFeel(info.getClassName());
       break;
     } 
}

这可能也会有所帮助。

@Jop 你确定其他平台也适用吗?那KDE主题呢? - giannis christofakis
1没关系,我错了,对不起。但是为什么不直接使用javax.swing.UIManager.setLookAndFeel("com.sun.java.swing.plaf.gtk.GTKLookAndFeel");呢? - jobukkit
2@Jop 由于Java应用程序是跨平台的,您应该检查您的系统是否安装了GTK主题。 - giannis christofakis