2011-02-14 63 views
7

我有以下简单的代码:为什么setBackground到JButton不起作用?

btn = new JButton(); 
btn.setBackground(backgroundColor) 

,当我用我的工作:

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

但它停止了我评论过上述行后,开始工作。有人知道它为什么会发生,以及如何在不使用明确的外观和感觉的情况下为背景颜色设置按钮?

ADDED

在我看来,我需要使用getBackground。但是我不知道怎么做。

+8

在一个不相关注:请不要使用`UIManager的'这样的行:对PLAF类名称进行硬编码意味着当PLAF不可用时(例如,在非Windows JDK上**或在更新的Windows JDK上可能会停止传送该特定类别),您的代码将不会运行。 [`UIManager.getSystemLookAndFeelClassName()`](http://download.oracle.com/javase/6/docs/api/javax/swing/UIManager.html#getSystemLookAndFeelClassName())可能就是你要做的。 – 2011-02-14 10:20:26

+0

你能发表更多信息吗?你的UIManager.setLookAndFeel(“com.sun.java.swing.plaf.windows.WindowsClassicLookAndFeel”);在btn.setBackground(backgroundColor)命令之后还是之前? – Serhiy 2011-02-14 10:38:49

+0

@Serhiy,我的LookAndFeel在之前。我根本不想使用它。 – Roman 2011-02-14 10:53:59

回答

6

从的setBackground()的javadoc:

它是由外观和感觉,以遵守此属性,有的可能选择忽略它。

也许你的LAF忽略它。

0

问题也可能与您创建按钮的方式有关。检查上面的代码:

public class Test extends JApplet{ 

public void init() 
{ 
    java.awt.EventQueue.invokeLater(new Runnable() 
    { 
     public void run() 
     { 
      setSize(200, 200); 
      setLayout(null); 

      JPanel p = new JPanel(); 
      getContentPane().add(p); 
      p.setSize(getSize()); 
      p.setLayout(null); 

      JButton b = new JButton("test"); 
      p.add(b); 
      b.setBounds(10, 10, 100, 20); 
      b.setBackground(Color.GREEN); 

     } 
    }); 
} 

}

0

只需你想设置为背景的按钮点击一次,然后转到属性窗口。在那边,第二个选项将是背景。点击它的省略号,你可以根据自己的喜好改变颜色。在您运行程序之后,颜色将不会显示在您框架中的按钮上。你可以看到按钮是你喜欢的颜色。

10

有必要的元素设置不透明为true的颜色来填充

 btn = new JButton(); 
    btn.setOpaque(true); 
    btn.setBackground(backgroundColor); 
1

添加btn.setBorderPainted(假)