我有JButton
我希望将背景颜色更改为白色。使用金属外观时,我使用setBackground
:
不幸的是,使用Windows LAF时“背景颜色”的概念不同;背景颜色是按钮周围绘制的颜色:
我想使用Windows LAF,但允许将此JButton
的按钮颜色更改为白色。我该怎么做?
答案 0 :(得分:4)
您必须决定是否值得付出努力,但您始终可以创建自己的ButtonUI
,如{@ 3}}所示,由于@mKorbel。
答案 1 :(得分:3)
我在XP上使用JDK 6。看起来Window UI不会遵循正常的绘制规则,而不是1.正如您所注意到的,setBackground()不起作用。您应该能够通过告诉组件不要填写内容区域来进行自定义绘画:
import java.awt.*;
import javax.swing.*;
public class ButtonBackground extends JFrame
{
public ButtonBackground()
{
setLayout( new FlowLayout() );
JButton normal = new JButton("Normal");
add(normal);
JButton test1 = new JButton("Test 1")
{
@Override
public void paintComponent(Graphics g)
{
g.setColor( Color.GREEN );
g.fillRect(0, 0, getSize().width, getSize().height);
super.paintComponent(g);
}
};
test1.setContentAreaFilled(false);
add(test1);
}
public static void main(String[] args)
{
try
{
// UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
}
catch (Exception e2) {}
ButtonBackground frame = new ButtonBackground();
frame.setDefaultCloseOperation( EXIT_ON_CLOSE );
frame.pack();
frame.setLocationRelativeTo( null );
frame.setVisible(true);
}
}
当您运行代码时,它似乎正常工作。也就是说,当您单击按钮时,您会看到边框更改。但是,如果您使用Windows XP LAF运行,则边框永远不会更改为您没有看到按钮单击效果。
因此,我认为问题出在WindowUI上,您需要自定义可能过于复杂的UI,因此我没有解决方案。
答案 2 :(得分:1)
但我仍然认为(由Darryl修改)是正确的UIManager.get("Button.gradient"),因为它将是跨平台的
编辑:正确的答案是 - Nimbus还是一些Custom L&F,为什么重新发明轮子(由Rob)
答案 3 :(得分:1)
您最好的选择是使用SwingX:
JXButton允许您使用MattePainter为.setBackgroundPainter(Painter)
设置背景画家,以达到您想要的效果。让JXButton从JButton扩展,代码中的更改很少:
Color bg = new Color(new Random().nextInt(16777215)); // Random color
JButton button = new JButton();
button.setBackground(bg);
会变成
JXButton button = new JXButton();
button.setBackgroundPainter(new MattePainter(bg));
答案 4 :(得分:0)
而不是弄乱按钮的背景颜色,你可以做任何表明你试图用不同方式表示的东西吗?
显示图标,使按钮变为粗体而不是纯文本等
仅通过不同的背景颜色指示某些内容并不总是显而易见的,并且根据用户的系统颜色,可能会出现震动或不可见。
例如,如果用户以“高对比度”模式运行窗口该怎么办?