Mat*_*t H 6 java gtk swing look-and-feel
我有一个已经编写的Java Swing应用程序(所以没有切换UI框架),我希望看起来至少使用GTKLookAndFeel.我已经考虑过LookAndFeels中字体和组件大小差异等问题,但有一点我无法弄清楚为什么我的弹出菜单根本没有边框.看起来他们正在使用不看起来像GTK本地的Synth边框.我希望能够支持Metal,Windows和GTK,但这些弹出窗口看起来很糟糕.这是一个错误吗?什么是一个很好的(非hacky)方法解决这个问题,而不会影响其他看起来很好的LookAndFeels边框?
在我看来 GTK LaF 的设计已经被打破了。对于看似随机的 JCOmponents,它不尊重程序员的 UI 设置(字体颜色边框背景等)。这是因为它从 .gtkrc 文件获取设置,而不是 setXXX(...) 调用。我会坚持在 Linux 上使用 Metal,在 Windows 上使用“原生”。
回复:
GTK+ 的外观和感觉可以通过资源文件进行定制。Swing 的 GTK+ 外观使用以下算法来定位资源文件:
- 如果系统属性 swing.gtkthemefile 存在,则解析并停止,例如:java -Dswing.gtkthemefile=/tmp/customTheme -jar SwingSet2.jar。
- 如果文件 user.home/.gtkrc-2.0 存在,则解析它并继续。
- 通过使用 XSETTINGS 确定的桌面属性 gnome.net/ThemeName 确定用户选择的主题名称 (THEMENAME)。如果此属性为 null,则使用 Default 作为 THEMENAME。1. 如果文件 user.home/.themes/THEMENAME/gtk-2.0/gtkrc 存在,则解析它并停止。2. 如果系统属性 swing.gtkthemedir 存在并且文件 swing.gtkthemedir/THEMENAME/gtk-2.0/gtkrc 存在,则解析它并停止。3. 如果系统属性 swing.gtkthemedir 不存在并且文件 /usr/share/themes/THEMENAME/gtk-2.0/gtkrc 存在,则解析它并停止。4. 最后,如果定义了 swing.gtkthemedir,则解析 swing.gtkthemedir/THEMENAME/gtk/gtkrc,否则解析 /usr/share/themes/THEMENAME/gtk/gtkrc。
定制 GTK+ 的一种方法是使用主题引擎。存在少数引擎。在 1.4.2 中,Swing 支持 Default、pixmap 和 bluecurve 引擎的主题文件。我们正在研究开放 API 的方法,以允许创建其他 GTK 引擎。请访问 http://www.themes.org查看示例。
- http://java.sun.com/j2se/1.4.2/docs/guide/swing/1.4/Post1.4.html
我的猜测是 java 正在从另一个 rc 文件获取其主题,或者不支持当前的边框选项。
| 归档时间: |
|
| 查看次数: |
2116 次 |
| 最近记录: |