如何在Java GUI中设置按钮的背景颜色?

20

以下是在特定面板3上创建9个网格布局按钮的代码。我想要的是使每个按钮的背景为黑色,上面有灰色文本。有人可以帮忙吗?

 for(int i=1;i<=9;i++)
 {
     p3.add(new JButton(""+i));
 }

7
老实说,大家应该使用集成开发工具(IDE)。自动完成是学习编程语言库中最好的方式之一,方法名称通常也非常易于理解。 - Denis Tulskiy
1
@DenisTulskiy 你的评论有何必要? - Ungeheuer
1
@JohnnyCoder,我猜我当时很沮丧,所以我的回复有点讽刺。虽然如此,我仍然相信RTFM是一个好建议 :) - Denis Tulskiy
8个回答

28

请查看JButton文档。 特别注意继承自JComponentsetBackgroundsetForeground方法。

for(int i=1;i<=9;i++)
{
    JButton btn = new JButton(String.valueOf(i));
    btn.setBackground(Color.BLACK);
    btn.setForeground(Color.GRAY);
    p3.add(btn);
}

17
在Mac上,这在Java 8中无法工作。背景颜色是按钮后面的颜色。然后按钮会绘制在黑色背景的上方,按钮是灰色的带着灰色的文字(你看不清文本)。事实上,更糟糕的是,除非首先调用setOpaque(true),否则根本不会绘制黑色背景。 - Jason
4
无法在Java 8上运行,如@Jason所说。背景颜色是按钮后面的颜色。 - William
3
使用 setBorderPainted(false) 可以解决上述问题。 - Homaei

12

简单的写法:

btn.setBackground(Color.red);

使用RGB值:

btn[i].setBackground(Color.RGBtoHSB(int, int, int, float[]));


3
我喜欢使用btn.setBackground(new Color(int, int, int));来设置RGB值。 - Michael Arnold

3
更改背景属性可能不足以使组件看起来像一个按钮。您可能需要重新实现paint方法,如此处所示,以获得更好的结果: enter image description here

2
for(int i=1;i<=9;i++) {
    p3.add(new JButton(""+i) {{
        // initialize the JButton directly
        setBackground(Color.BLACK);
        setForeground(Color.GRAY);
    }});
}

2

您可能需要使用setOpaque方法来确保通过向该方法传递true显示颜色。


2

似乎在某些平台上(我使用的是Windows 7),setBackground()方法不起作用。我发现这个答案这个问题很有帮助。然而,我并没有完全使用它来解决我的问题。相反,我决定在按钮旁边着色一个面板,这样更容易实现且美观程度几乎相同。


1
使用setBackground方法来设置背景,使用setForeground来改变文本颜色。然而,请注意,在黑色背景上放置灰色文本可能会使文本读起来有些困难。

0

我尝试了之前的解决方案,但仍然无法改变颜色。偶然发现另一篇文章并解决了我的问题。按钮由不同的层组成。移除所有层可以解决问题:

    btn.setOpaque(true);
    btn.setContentAreaFilled(true);
    btn.setBorderPainted(false);
    btn.setFocusPainted(false);
    btn.setBackground(Color.GRAY); // for the background
    btn.setForeground(Color.white); // for the text

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