2010-04-27 52 views
0

我在我的应用程序中使用JButtons。他们需要有不同的颜色。首先我用btn.setBackground(col);。它在我的电脑上工作,在另一台电脑上,我的按钮只是灰色(不是红色,因为它应该是)。为什么我的JButton看起来不同于不同的计算机?

试图解决这个问题,我决定使用图像。我这样做的方式如下:tmp = new JButton(newIcon);

再次,它可以在我的电脑和另一台电脑上正常工作,我只看到灰色的按钮。

有没有人有任何想法可以解决问题的原因以及如何解决?我听说它可能与“本土系统的外观和感觉”有关。但我不知道这意味着什么,如果是这样的话我该怎么办?任何人都可以请求帮助我吗?

+0

您尝试使用彩色按钮修复哪些UI设计/可用性问题? - – 2010-04-27 13:26:22

+0

显然,Windows Vista,Mac OS X和Nimbus L&F忽略设置背景颜色。 – Nate 2010-04-27 16:31:02

回答

2

Swing有可插拔的概念look and feels。其中一些外观和感觉模仿了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); 

代码的第一部分建立可用外观的列表和感觉的名字和被选择在其中的一个第二行为。但既然你想总是使用相同的拉夫,你可以使用类似的东西:

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

但是我能做些什么来解决这个问题?我可以强制我的软件使用固定的外观吗?在我的软件中使用的外观和感觉是不是可以在另一台电脑上使用? – Roman 2010-04-27 13:08:44

+0

是的,你可以。我会更新我的帖子,以使用我使用的代码片段。 – 2010-04-27 13:17:28

2

是的,这取决于操作系统。在Windows,WindowsClassic等不同的操作系统中,相同的按钮可能会有所不同, 您可以通过应用不同的“外观和感觉”来查看系统的差异。为此,你应该了解UIManager类。

对于离,对于WindowsClassic,

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

对于Nimbus的外观和感觉,

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

有关详细信息,请参见链接如下。

Look And Feel Tutorials

+0

如果我明确设定了具体的外观和风格,说我可以删除上述问题是否正确?通过这种方式,我的程序将在不同的计算机上使用相同的外观和感觉,并且所有内容看起来都一样。或者我错了? – Roman 2010-04-27 13:17:27

0

的外观和感觉(LAF)是外观的Java应用程序将得到和它取决于你的业务系统。

您可以设置一个外部的外观和感觉你的应用程序,以避免这个问题

尝试看看物质外表和感觉。该网站包含该库并教会如何使用它 https://substance.dev.java.net/

您可以定义GUI的外观并导出库与您的程序一样,每个人都会得到相同的外观和感觉。

相关问题