为什么将setBackground应用于JButton无效?

11
我有以下简单的代码:
btn = new JButton();
btn.setBackground(backgroundColor)

我使用以下代码,它正常工作:

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

我注释掉上面那行代码后,按钮就不能正常工作了。有人知道为什么会这样以及如何在不使用显式外观的情况下设置按钮的背景颜色吗?

补充

我觉得我需要使用 getBackground,但我不知道怎么用。


8
顺便提一句:请不要像那样使用UIManager那行代码:硬编码PLAF类名意味着当该PLAF不可用时(例如在非Windows JDK或在可能停止提供该特定类的新Windows JDK上),您的代码将无法运行。也许您需要使用UIManager.getSystemLookAndFeelClassName() - Joachim Sauer
你能发更多详细信息吗?你的 UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsClassicLookAndFeel"); 命令是在 btn.setBackground(backgroundColor) 命令之前还是之后? - Serhiy
@Serhiy,我的LookAndFeel以前就有了。我根本不想使用它。 - Roman
@proactif是正确的。这个相关的[答案][1]讨论了几种替代方法。[1]:http://stackoverflow.com/questions/3420431 - trashgod
6个回答

14

必须将元素的不透明度设置为true,才能填充颜色。

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

7

添加btn.setBorderPainted(false)


6

从setBackground() javadoc中:

这取决于外观的尊重该属性,有些可能选择忽略它。

也许您的外观只是忽略了它。


虽然有可能它只是被忽略了,但这种情况极不可能发生。首先检查setOpaque选项,因为那是更可能的原因。 - Reid

0
    btn.setBorderPainted(false);
    btn.setOpaque(true);
    btn.setBackground(Color.BLACK);
    btn.setForeground(Color.BLUE);

-1

问题也可能出在您创建按钮的方式上。请检查上面的代码:

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);

        }
    });
}

}


-1
只需单击要设置背景的按钮一次,然后转到属性窗口。 在那里,第二个选项将是背景。 点击省略号,您可以将颜色更改为所需的颜色。 颜色不会在程序运行之前显示在框架中的按钮上。 您可以看到按钮处于您喜欢的颜色中。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接