我有5个JButton:b1,b2,b3,b4,b5。 默认情况下,它们的颜色为灰色。 当我点击任何按钮时,该按钮的背景变为白色。 当我单击另一个按钮时,我希望之前单击的按钮将其背景更改为灰色,并使用此新单击的按钮将其背景更改为白色。这是我写的代码:
int liveButton = 0; //holds the value of the button that is last clicked.
//0 indicates no button clicked (in the beginning)
private void ChangeInUsersList(int clickedButton) {
switch(liveButton) {
case 1 : b1.setBackground(Color.GRAY);
break;
case 2 : b2.setBackground(Color.GRAY);
break;
case 3 : b3.setBackground(Color.GRAY);
break;
case 4 : b4.setBackground(Color.GRAY);
break;
case 5 : b5.setBackground(Color.GRAY);
break;
default: System.out.println("No button to change");
}
liveButton = clickedButton;// store the clicked button to change its
//background later
}
private void b1ActionPerformed(java.awt.event.ActionEvent evt) {
ChangeInUsersList(1);
b1.setBackground(new java.awt.Color(255,255,255));
}
private void b2ActionPerformed(java.awt.event.ActionEvent evt) {
ChangeInUsersList(2);
b2.setBackground(new java.awt.Color(255,255,255));
}
private void b3ActionPerformed(java.awt.event.ActionEvent evt) {
ChangeInUsersList(3);
b3.setBackground(new java.awt.Color(255,255,255));
}
private void b4ActionPerformed(java.awt.event.ActionEvent evt) {
ChangeInUsersList(4);
b4.setBackground(new java.awt.Color(255,255,255));
}
private void b5ButtonActionPerformed(java.awt.event.ActionEvent evt) {
ChangeInUsersList(5);
b5.setBackground(new java.awt.Color(255,255,255));
}
然而,它没有按预期工作。当我点击一个按钮时,它的背景确实变为白色。但是,如果我在此之后单击其他按钮,则前一个按钮的背景不会变为灰色。我尝试用 new java.awt.Color(236,233,216)替换 Color.GREY - 灰色的rgb ,但它仍然无效。
答案 0 :(得分:2)
如果您曾 需要为按钮着色然后将颜色设置回其原始默认状态(系统灰色),请使用
button.setBackground(null);
这将删除任何以前的颜色设置。
(我有一个应用程序,我需要点击几个按钮,跟踪我点击的那些,然后当我执行一个功能时,我“取消”它们。我可以使用切换按钮,但是这个行更改以添加此功能比更改整个组件数组更容易。此外,UI“感觉”是正确的。)
答案 1 :(得分:1)
请解释一下你想要做什么。
根据你所写的内容,我收集到的是你一次只能选择一个按钮。如果是这样,用JToggleButtons替换你的JButtons并将它们放在一个ButtonGroup中。 例如。 (伪代码):
//[...]
JToggleButton button2 = new JToggleButton(...)
//[...]
ButtonGroup group = new ButtonGroup();
//[...]
group.add(button2);
//[...]
否则,如果您真的想要更改按钮的背景颜色:
private List<JButton> buttons;
private JButton b1, b2, b3, b4, b5;
private void initButtons()
{
buttons = new ArrayList<JButton>(5); // new List to "save" Buttons in
buttons.add(b1 = new JButton());
// etc etc ...
buttons.add(b5 = new JButton());
}
public void setActiveButton(JButton button)
{
for(JButton b : buttons)
{
b.setBackgroundColor(Color.GREY);
}
button.setBackgroundColor(Color.WHITE);
}
private void b1ActionPerformed(java.awt.event.ActionEvent evt)
{
setActiveButton(b1);
// or to be more "generic"
// setActiveButton((JButton) evt.getSource());
}
答案 2 :(得分:0)
我通过在声明“liveButton”变量后添加以下行来修复它:
Color buttonColor = b1.getBackground();
稍后,在ChangeInUsersList函数中,我用buttonColor替换了“Color.GRAY”。 它起作用了:))
答案 3 :(得分:0)
您的按钮上需要setBackground()
,setContentAreaFilled(false)
,setOpaque(true)
。