2010-04-11 4 views
1

У меня есть 5 JButtons: b1, b2, b3, b4, b5. По умолчанию их цвет серый. Когда я нажимаю на любую кнопку, фон этой кнопки меняется на белый. Когда я нажимаю другую кнопку, я хочу, чтобы предыдущая кнопка была нажата, чтобы изменить ее фон на серый, и эту кнопку недавно щелкнули, чтобы изменить фон на белый. Вот код, который я написал:Установка фона Jbutton

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)); 
} 

Однако, он не работает должным образом. Когда я нажимаю кнопку, ее фон меняется на белый. Однако, если я нажму на какую-нибудь другую кнопку после этого, фон прежней кнопки не изменится на серый. Я попытался заменить Color.GREY с новый java.awt.Color (236,233,216) - rgb для серого, но он все еще не работает.

+0

Вы пытаетесь имитировать то, что делает ButtonGroup? например можно выбрать или переключить только одну кнопку? btw: заменить новый java.awt.Color (255,255,255) с java.awt.Color.white – Tedil

+0

да! но я не понял, что ButtonGroup существует. Я предположил, что группа buttongroup предназначена только для переключателей. – mithun1538

ответ

0

Я установил ее, добавив следующую строку после объявления переменной "liveButton":

Color buttonColor = b1.getBackground(); 

Позже внутри функции ChangeInUsersList, я заменил "Color.GRAY" с buttonColor. И это сработало :)

1

Пожалуйста, объясните, что именно вы хотите сделать.

Из того, что вы написали, я понимаю, что вы пытаетесь выбрать только одну кнопку за раз. Если это так, замените JButtons на JToggleButtons и поместите их в один 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()); 
} 
+0

Да, у меня есть только одна кнопка, выбранная за раз. Я хотел, чтобы кнопка, которая была нажата, была выделена. – mithun1538

2

Если вы когда-нибудь сделать нужно покрасить кнопку, а затем установить цвет обратно в исходное состояние по умолчанию (система серого), используйте

button.setBackground(null); 

Это приведет к удалению всех предыдущих настроек цвета.

(У меня есть приложение, в котором мне нужно щелкнуть несколькими кнопками, отслеживать, какие из них я нажал, а затем, когда я выполнил функцию, я «unclick» их. Я мог бы использовать кнопки переключения, но это один изменение линии, чтобы добавить эту функцию, было легче, чем изменить весь мой массив компонентов. кроме того, пользовательский интерфейс «чувствовать» является правильным.)

0

Вам нужно как setBackground(), setContentAreaFilled(false), setOpaque(true) на кнопке.

Смежные вопросы