首先,使用gnome不是一个选项(但可以安装它的库).
我需要知道使用当前安装的KDE KDE外观来显示Java Swing桌面应用程序的必要条件.理想情况下,该解决方案应该允许我应用看起来像底层窗口系统的外观(即:用于Windows的Windows LNF,用于Gnome的GTK LNF(GTK),用于KDE的QT LNF(QT),其他平台的默认值) ).
在KDE下,您可以将其配置为对GTK应用程序使用当前的KDE主题.所以,如果解决方案适用于GTK,那很好.
当我在Gnome(Ubuntu 8.04)下运行以下代码时,Java应用程序看起来很漂亮.它与其他应用程序集成得非常好:
try {
// Set System L&F
UIManager.setLookAndFeel(
UIManager.getSystemLookAndFeelClassName());
} catch(Exception e) { //Handle it }
但是,如果我使用KDE在Debian(Lenny)下运行相同的东西,则UIManager.getSystemLookAndFeelClassName()调用将返回Java默认值.
如果我继续并强制它使用GTK LNF,则应用程序不起作用.有些字段是隐形的,有些字段不合适,一切都无法使用:
try {
//Force the GTK LNF on top of KDE, but **it doesn't work**
UIManager.setLookAndFeel("com.sun.java.swing.plaf.gtk.GTKLookAndFeel");
} catch (Exception e) { /*Handle it*/ }
我也尝试过以下代码.让用户选择任何一个可用的LNF,然后尝试设置它.金属和Motif工作正常. GTK没有.滑块真的搞砸了.列表框看起来很丑陋并消失,但似乎有效.按钮和菜单似乎没问题.相关代码如下所示:
(...)
/** Creates new form SwingFrame */
public SwingFrame() {
initComponents();
//Save all available lafs in a combobox
cbLafs.removeAllItems();
UIManager.LookAndFeelInfo[] lafs=UIManager.getInstalledLookAndFeels();
for (int i=0,t=lafs.length;i<t;i++)
{
cbLafs.addItem(lafs[i]);
System.out.println(lafs[i].getName());
}
}
public void changeLookAndFeel(String laf)
{
//If not specified, get the default one
if (laf==null) {
laf=UIManager.getSystemLookAndFeelClassName();
}
try {
// Set System L&F
UIManager.setLookAndFeel(laf);
}
catch (Exception e) {
// handle exception
e.printStackTrace();
}
SwingUtilities.updateComponentTreeUI(this);
}
private void cbLafsActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
UIManager.LookAndFeelInfo laf=(UIManager.LookAndFeelInfo)cbLafs.getSelectedItem();
if (laf==null)
changeLookAndFeel(null);
else
changeLookAndFeel(laf.getClassName());
}
同样的系统使所有GTK应用程序都正常工作(例如:Firefox).所以:
1)在KDE下运行Java GTK LNF应用程序的环境缺少什么?
2)JVM检查什么将GTK作为默认系统主题返回?
谢谢你的帮助
路易斯费尔南多
PS->我也尝试了其他解决方案,例如JGoodies,简单的AWT和SWT.但是,Swing with GTK LNF将是避免SWT本地库和JGoodies额外罐子麻烦的最佳解决方案(同样,JGoodies LNF看起来不像Gnome下的Swing GTK那样集成). AWT看起来很可怕(类似主题)并且缺少许多功能.
解决方法:
您可以从命令行设置外观:
java -Dswing.defaultlaf = com.sun.java.swing.plaf.gtk.GTKLookAndFeel MyApp
此外,SwingSet2.jnlp提供了可以更改的所有不同内容的示例演示.源和其他信息可以在这里找到:link text