ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2019-07-01 08:51:00  阅读:278  来源: 互联网

标签:java swing gtk kde look-and-feel


首先,使用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

标签:java,swing,gtk,kde,look-and-feel
来源: https://codeday.me/bug/20190701/1345291.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有