我在我的应用程序中使用JButtons。他们需要有不同的颜色。首先,我使用了btn.setBackground(col);
。它适用于我的计算机和另一台计算机,我的按钮只是灰色(不是红色,因为它应该是)。
试图解决这个问题我决定使用图像。我是通过以下方式完成的:tmp = new JButton(newIcon);
同样,它在我的计算机和另一台计算机上工作正常,我只看到灰色按钮。
有没有人有任何想法可能是问题的原因以及如何解决?我听说它可能与“原生系统的外观”有关。但我不知道这意味着什么,如果是这样的话该怎么办?任何人都可以请求帮助我吗?
答案 0 :(得分:2)
Swing具有可插入look and feels的概念。其中一些外观和感觉模仿了Windows,GTK +等本机组件的外观。即使在Windows上,也有两种独立的外观 - 我认为经典和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");
答案 1 :(得分:2)
是的,这取决于操作系统。在Windows,WindowsClassic等不同的操作系统中,相同的按钮可能会有所不同, 您可以通过应用不同的“外观和感觉”来查看系统的差异。为此你应该知道UIManager Class。
例如,对于WindowsClassic,
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsClassicLookAndFeel");
对于Nimbus的外观和感觉,
UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
有关详细信息,请参阅以下链接。
答案 2 :(得分:0)
外观(LaF)是您的Java应用程序将获得的外观,它取决于您的操作系统。
您可以为应用程序设置外观并避免此问题
尝试看看物质的外观和感觉。该网站包含该库并教授如何使用它 https://substance.dev.java.net/
您可以定义GUI的外观并使用您的程序导出库,每个人都将获得相同的外观。