我试图改变JToggleButton
的颜色,当它以可靠的外观和感觉独立的方式进行选择时。更改所选JToggleButton的背景颜色
如果使用金属大号& F,则使用UIManager的是一种方法:
UIManager.put("ToggleButton.selected", Color.RED);
注意:IYY指出,我在上面的属性名称的拼写错误,但我会离开它上面的人到达这里,但实际属性的名称应该是:
UIManager.put("ToggleButton.select", Color.RED);
然而,这并不在我目前的外观(目前的Windows XP)的工作。经过一些进一步的分析,似乎Windows中的系统外观和感觉(仍然是XP)完全不使用Color
基于Color
的UIManager
属性,或者它至少不会自己提供它们(有一个快速示例在线到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的背景颜色?
可以覆盖BasicbuttonUI或只是MetalButtonUI(当时只为金属L&F)有些淡淡的http://stackoverflow.com/questions/5751311/creating-custom-button -in-java/5755124#5755124 – mKorbel 2011-04-27 17:57:44
为什么? LAF应该控制外观,最好让它做到这一点 - 如果干扰成功,你的定制油漆/颜色会像拇指一样突出 – kleopatra 2011-04-27 18:15:17
@kleopatra我通常认为,离开L&F是一种好的做法,但简单地说,这是一个理想的功能。特别是,它实际上意味着坚持下去。 – pickypg 2011-04-27 18:55:10