Сколько программистов вам нужно, чтобы поменять лампочку? 76, 1, чтобы изменить это, и 75, чтобы сказать, как они могли бы сделать это лучше.
У вас есть плохие практики кода, но это обычно из-за шаткого понимания фундаментальных концепций, лежащих в основе языкового дизайна. Поэтому я не буду комментировать, как ваш код плох для того или другого , просто объясню основы, которые вам следует знать.
Для упрощения ActionListener
- это объект, который будет реагировать на ActionPerformedEvent
. Давайте определим один, класс с именем Observer:
Наблюдатель не знает, кто сгенерировал событие, поэтому давайте скажем ему, и если это JRadioButton, давайте использовать его как один
public class Observer implements ActionListener{
@Override
public void ActionPerformed(ActionEvent ae){
Object source = ae.getSource();
if (source instanceof JRadioButton)
((JRadioButton) source).setText("this works");
}
Любой из ваших JRadioButton - это объекты, которые постоянно генерируют ActionEvent
s, но обычно никто не заботится о нас, когда мы добавляем ActionListener
, мы в основном говорим: заставляет этот ActionListener
объект наблюдать мое поведение .
Итак, нам нужен кто-то, кого можно наблюдать, и наблюдатель, давайте сделаем это в вашем пользовательском интерфейсе (или в упрощенной версии):
Так как вы пытаетесь использовать глобальный прослушиватель, вам нужно убедиться, что он там есть, наблюдатель (наш ActionListener) пока нулевой. Давайте создадим его экземпляр. На этот раз мы знаем, что наблюдатель не равен нулю
public class UserInterface implements runnable{
private ActionListener observer new Observer();
//...
public void someMethodToCreateButtons(){
JRadioButton observableButton = new JRadioButton("Created here");
observableButton.addActionListener(observer);
}
И вот, когда вы выберете observableButton
, он изменит свой текст на "это работает".
Это основы, теперь я использовал эти имена observableButton
и Observer
по какой-то причине, ActionListeners основаны на том, что известно как observer design pattern
, вы можете взять книгу о шаблонах конструкций, вы не пожалеете это.
Наконец, кажется, что вы делаете вещи слишком сложными для себя, попробуйте упростить свою логику. Возможно, сделать JPanel
, содержащий различные наборы кнопок, и отображать его всякий раз, когда выполняется условие? просто плеваться здесь, но постарайся сделать это простым, надеюсь, это поможет, удачи!