0

我在我的应用程序中使用 JButtons。他们需要有不同的颜色。首先我用那个btn.setBackground(col);。它可以在我的计算机上工作,而在另一台计算机上,我的按钮只是灰色的(不是红色,因为它应该是)。

为了解决这个问题,我决定使用图像。我通过以下方式进行操作:tmp = new JButton(newIcon);

同样,它在我的计算机上运行良好,在另一台计算机上我只看到灰色按钮。

有没有人知道问题的原因是什么以及如何解决?我听说它可能与“本机系统的外观”有关。但是我不知道这是什么意思,如果是这种情况我该怎么办?任何人都可以请求,帮助我吗?

4

3 回答 3

2

Swing 具有可插拔外观的概念。其中一些外观和感觉模仿了 Windows、GTK+ 等原生组件的外观。即使在 Windows 上,也有两种不同的外观和感觉——我认为是 Classic 和 Vista。也许您在两个系统上使用不同的操作系统和一个自动设置外观和感觉的 GUI 设计器。然而,大多数人不会——默认外观和感觉 Metal(Java 1.6.10 之前)和 Nimbus 在每个操作系统上看起来都一样。

   // build the look and feel section
    final LookAndFeelInfo[] lookAndFeelInfos = UIManager.getInstalledLookAndFeels();
    List<String> lookAndFeelNames = new ArrayList<String>();
    lookAndFeelNames.add("System");

    for (LookAndFeelInfo lookAndFeelInfo : lookAndFeelInfos) {
        if (!lookAndFeelInfo.getName().equals("CDE/Motif")) {
            lookAndFeelNames.add(lookAndFeelInfo.getName());
        }
    }

  if (selectedLookAndFeel.equals("System")) {
                    try {
                        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                    } catch (ClassNotFoundException ex) {
                        java.util.logging.Logger.getLogger(SpellbookFrame.class.getName()).log(Level.SEVERE, null, ex);
                    } catch (InstantiationException ex) {
                        java.util.logging.Logger.getLogger(SpellbookFrame.class.getName()).log(Level.SEVERE, null, ex);
                    } catch (IllegalAccessException ex) {
                        java.util.logging.Logger.getLogger(SpellbookFrame.class.getName()).log(Level.SEVERE, null, ex);
                    } catch (UnsupportedLookAndFeelException ex) {
                        java.util.logging.Logger.getLogger(SpellbookFrame.class.getName()).log(Level.SEVERE, null, ex);
                    }
                } else {
                    for (LookAndFeelInfo lookAndFeelInfo : lookAndFeelInfos) {
                        if (lookAndFeelInfo.getName().equals(selectedLookAndFeel)) {
                            try {
                                UIManager.setLookAndFeel(lookAndFeelInfo.getClassName());
                            } catch (ClassNotFoundException e1) {
                                e1.printStackTrace();
                            } catch (InstantiationException e1) {
                                e1.printStackTrace();
                            } catch (IllegalAccessException e1) {
                                e1.printStackTrace();
                            } catch (UnsupportedLookAndFeelException e1) {
                                e1.printStackTrace();
                            }
                        }
                    }
                }

                SwingUtilities.updateComponentTreeUI(tabbedPane);
                SwingUtilities.updateComponentTreeUI(parent);

代码的第一部分构建一个可用外观名称的列表,第二部分在其中一个被选中时进行操作。但是,由于您希望始终使用相同的 laf,您可以使用以下内容:

UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
于 2010-04-27T13:01:55.110 回答
2

是的,这取决于操作系统。相同的按钮在不同的操作系统(如 Windows、WindowsClassic 等)中可能看起来不同,您可以通过应用不同的“外观”来查看您的系统的差异。为此,您应该了解 UIManager 类。

例如,对于 WindowsClassic,

UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsClassicLookAndFeel");

对于 Nimbus 的外观和感觉,

UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");

更多详情,请查看以下链接。

观感教程

于 2010-04-27T13:08:35.747 回答
0

外观 (LaF) 是您的 Java 应用程序将获得的外观,它取决于您的操作系统。

您可以为应用程序设置外部外观以避免此问题

尝试查看Substance的外观和感觉。该网站包含该库并教授如何使用它 https://substance.dev.java.net/

您可以定义 GUI 的外观并使用您的程序导出库,每个人都将获得相同的外观。

于 2010-04-27T13:16:52.400 回答