2013-02-14 3 views
1

Мне нужна кнопка, которая при нажатии включает все остальные кнопки и изменяет имя метки с «Выкл.» На «Вкл.», А при повторном нажатии отключает все кнопки и переключает переключатель в положение «выключено», назад, как переключатель включения/выключения. Дело в том, что я могу «включить его», но я не могу его отменить.Как сделать кнопку включения/выключения на java?

+3

Является ли это свинг GUI? Android? AWT? Веб-программа? Какие? Если вы попытались реализовать это, и ваш код не работает, вы можете подумать о том, чтобы показать нам вашу попытку кода. –

+1

Держу пари, что это Свинг, так как он/она поставил вопрос «JButton». –

+0

да, это качели, извините за задержку, мой интернет отстой! Я попробую! благодаря!! –

ответ

5

Если Swing, то, возможно, вам захочется поместить кнопки, которые вы хотите контролировать, в массив или ArrayList<AbstractButton>. Таким образом, ActionListener кнопки управления может просто перебирать массив или коллекцию с циклом for, вызывая setEnabled(true) или false на кнопках. Рассмотрите возможность создания кнопки управления JCheckBox или JToggleButton.

Обратите внимание, что если вы используете JToggleButton, добавьте к нему ItemListener. Если вы это сделаете, нет необходимости использовать логические значения. Просто проверьте состояние ItemEvent, переданного в метод itemStateChanged элемента ItemListener. Если getStateChanged() возвращает ItemEvent.SELECTED, то итерация через вашу коллекцию JButton включает все кнопки. Если он возвращает ItemEvent.DESELECTED, сделайте противоположное.

Также обратите внимание, как на комментарий Байрона Хокинса:

Вы можете считать, что ItemListener будет получать события, когда кнопка программно переключается, а также когда пользователь переключает кнопку. ActionListener запускается только при вводе пользователем. У меня часто были ошибки, потому что я выбрал неправильный.

+0

Также рассмотрим 'ButtonGroup'' JToggelButton', увиденный здесь (http://stackoverflow.com/a/6036048/230513). – trashgod

+1

Возможно, вам захочется рассмотреть, что 'ItemListener 'будет получать события, когда кнопка _programmatically_ переключается, а также когда _user_ переключает кнопку. «ActionListener» запускается только при вводе пользователем. У меня часто были ошибки, потому что я выбрал неправильный. –

+0

@ByronHawkins: очень хороший момент, спасибо! Если вы не возражаете, я добавлю это к ответу. –

1

Если кнопка нажата и не выскочит обратно, скорее всего, вы переопределить метод в JToggleButton без вызова версии этого super «s. Вместо переопределения методов создайте ActionListener и используйте addActionListener() для прикрепления к кнопке. Когда ваш слушатель уведомляется о действиях кнопок, проверьте, находится ли кнопка переключения вверх или вниз и setEnabled() на других кнопках соответственно.

0

попытаться использовать этот простой код, используйте переменную как флаг

public int status = 0; //0 = on, 1=off 

public void button_clicked() 
{ 
    //on button clicked 
    if(status == 0) 
    { 
     //logic here 
     status = 1; 
     buttonname.setText("Off"); 
    } 
    //off button clicked 
    else if(status == 1) 
    { 
     //logic here 
     status = 0; 
     buttonname.setText("On"); 
    } 
} 
+0

Если у вас есть только два состояния, почему бы не использовать boolean? Он сделал бы код if (on) {...} else {...} – n00begon

+0

да, вы можете. Это только мой стиль кода. вы можете изменить его в любом случае. – goravine

+0

спасибо за помощь! Я уже решил это! благодаря!! –

1

вам необходимо логическое значение для представления состояния кнопки.

Другими словами, когда ваша кнопка выключена (ваша логическая переменная ложна), из вашего слушателя onClick вы вызовете метод «turnButtonOn()» или что-то в этом роде.

Если булева переменная истинна, то вы будете вызывать метод turnButtonOff()

public void onClick() { 
    if(buttonOn){ 
     turnOff(); 
    } 
    else { 
     turnOn(); 
    } 
    buttonOn = !buttonOn; 
} 
Смежные вопросы