2013-04-01 2 views
1

Я сделал панель для своей программы. Он состоит только из RadioButtons. Когда выбран радиобъектив, я хочу установить логическое значение в другом коде. Эта панель будет использоваться как компонент большей панели или рамки, которая также должна быть способна прослушивать события, происходящие внутри этой панели.Добавление ActionListener к панели - панель реализует ActionListener vs Panel HAS A ActionListener

Итак, какой из следующих вариантов я должен выбрать для прослушивания событий -

1 -

RadioButtonPanel extends JPanel implements ActionListener{ 

    public void actionPerformed(ActionEvent e){} 
    //code to add the action listener to the radio buttons 
    oneRadioButton.addActionListener(this); 
} 

2 -

RadioButtonPanel extends JPanel{ 

    class InnerStrength implements ActionListener{ 
    public void actionPerformed(ActionEvent e){} 
    }  

    //code to add the action listener to the radio buttons  
    oneRadioButton.addActionListener(Anonymous InnerStrength) 

} 

3 - Любой другой способ сделать это, что Я не думал?

ответ

4

Добавить метод add/RemoveActionListener на свою панель. Используйте их как прокси-сервер для вашей радиокнопки и зарегистрируйте ActionListener прямо к нему

В качестве альтернативы вы можете указать способ isSelected, который возвращает состояние переключателя.

+0

Похоже, что некоторые клавиши на клавиатуре не работают хорошо: P – SuperStar

+0

@SuperStar Толстые пальцы + iPad + 11 месяцев + без сна = глупые ответы: P – MadProgrammer

+0

@MadProgrammer - Посмотрите мой код в этой ссылке - http: //stackoverflow.com/questions/15753536/parent-jpanel-how-to-listen-to-the-events-generated-by-components-of-a-child-j –

5

Вариант 3. Не продлить JPanel на всех, если вы можете достичь цели, используя его :-)

Всех JSomething имеют встроенные функции, предназначенные для использования как есть. Встроенная функциональность JPanel - это контейнер общего назначения. Поскольку все, что вы делаете, это добавить детей, нет необходимости расширять - настройка детей с помощью прослушивателей может быть выполнена в ... конфигурационном коде.

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

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