如何在 KDE 上强制/开始使用 Java 中的 GTKLookAndFeel?

2024-03-30

首先,使用 gnome 不是一个选项(但可以安装它的库)。

我需要知道使用当前安装的 KDE 外观和 KDE 感觉来显示 Java Swing 桌面应用程序需要什么。理想情况下,该解决方案应该允许我应用看起来像底层窗口系统的外观和感觉(即:用于 Windows 的 Windows LNF、用于 Gnome (GTK) 的 GTK LNF、用于 KDE (QT) 的 QT LNF、其他平台的默认系统)。

在 KDE 下,您也可以将其配置为对 GTK 应用程序使用当前的 KDE 主题。因此,如果该解决方案适用于 GTK,那就没问题了。

当我在 Gnome (Ubuntu 8.04) 下运行以下代码时,Java 应用程序看起来很漂亮。它与其他应用程序集成得很好:

try {
  // Set System L&F
  UIManager.setLookAndFeel(
  UIManager.getSystemLookAndFeelClassName());
} catch(Exception e) { //Handle it }

然而,如果我在 Debian (Lenny) 下使用 KDE 运行同样的事情,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,然后尝试设置它。金属和图案效果很好。 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) Java GTK LNF 应用程序在 KDE 下运行的环境缺少什么?

2) JVM 会检查什么来返回 GTK 作为默认系统主题?

谢谢你的帮助 路易斯·费尔南多

PS->我也尝试过其他解决方案,例如 JGoodies、普通 AWT 和 SWT。然而,带有 GTK LNF 的 Swing 将是避免 SWT 本机库和 JGoodies 额外 jar 的麻烦的最佳解决方案(而且,JGoodies LNF 看起来不像 Gnome 下的 Swing GTK 那样集成)。 AWT 看起来很丑陋(类似主题)并且错过了很多功能。


您可以从命令行设置外观:

java -Dswing.defaultlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel MyApp

Also, SwingSet2.jnlp http://java.sun.com/products/jfc/jws/SwingSet2.jnlp提供了所有可以更改的不同内容的示例演示。来源和其他信息可以在这里找到:链接文本 http://java.sun.com/docs/books/tutorial/uiswing/lookandfeel/plaf.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 KDE 上强制/开始使用 Java 中的 GTKLookAndFeel? 的相关文章

随机推荐