gpt4 book ai didi

java - 更改选定的 JToggleButton 的背景颜色

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:37:46 26 4
gpt4 key购买 nike

当以一种可靠的、外观和感觉独立的方式选择时,我正在尝试更改 JToggleButton 的颜色。

如果使用 Metal L&F,那么使用 UIManager 是一种方法:

UIManager.put("ToggleButton.selected", Color.RED);

注意:Iyy 指出我在上面的属性名称中有一个错字,但我会把它留在上面以供到达这里的人使用,但实际的属性名称应该是:

UIManager.put("ToggleButton.select", Color.RED);

但是,这在我当前的外观(当前为 Windows XP)中不起作用。经过一些进一步的分析,Windows(仍然是 XP)中的系统外观似乎没有为 ToggleButton< 使用任何基于 ColorUIManager 属性 根本不提供它们,或者至少它自己不提供它们(在线上有一个快速示例 find all property keys from the UIManager ,在该示例中方便地显式限制为 Color 属性)。

我试过设置背景颜色:

Action action = new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) { /* stuff */ }
};
JToggleButton button = new JToggleButton(action);
// tried with and without opaque true
button.setOpaque(true);
button.setBackground(Color.RED);

它不仅不会改变选中状态,甚至不会影响未选中状态。

我只在收到操作后才尝试更改背景颜色:

@Override
public void actionPerformed(ActionEvent e)
{
JToggleButton button = (JToggleButton)e.getSource();
if (button.isSelected()) // alternatively, (Boolean)getValue(Action.SELECTED_KEY)
{
button.setBackground(Color.RED);
}
}

这些都不起作用。我发现唯一可以工作的是我自己在选定状态下绘制按钮(这导致了一个工作示例,尽管看起来不标准):

private class ColoredToggleButton extends JToggleButton
{
ColoredToggleButton(Action action, Color color)
{
super(action);

setBackground(color);
}

@Override
public void paintComponent(Graphics g)
{
super.paintComponent(g);
if (this.isSelected())
{
int w = getWidth();
int h = getHeight();
String s = getText();

// selected color
g.setColor(getBackground());
g.fillRect(0, 0, w, h);
// selected foreground color
g.setColor(SystemColor.controlText);
g.drawString(s,
(w - g.getFontMetrics().stringWidth(s)) / 2 + 1,
(h + g.getFontMetrics().getAscent()) / 2 - 1);
}
}
}

根据 Java bug report 中的评论略作修改.有趣的是(好笑?),声称已在 1998 年修复。

有谁知道更好的、独立于 L&F 的方法来设置所选 JToggleButton 的背景颜色?

最佳答案

JToggleButton btn = new JToggleButton(...);
btn.setUI(new MetalToggleButtonUI() {
@Override
protected Color getSelectColor() {
return Color.RED;
}
});

关于java - 更改选定的 JToggleButton 的背景颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5808022/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com