AbstractButton
определяет метод addActionListener
. JButton
и несколько других общих классов наследуют его.Почему JCombobox не является подклассом AbstractButton?
Я вхожу в такое положение, когда хочу написать метод, который принимает массив объектов, поддерживающий addActionListener
, принимает ActionListener
и добавляет прослушиватель действий ко всем этим объектам. Поэтому я написал метод, как так:
private void addActionListener(ActionListener listener, AbstractButton... buttons){
for(AbstractButton button : buttons)
button.addActionListener(listener);
}
Однако некоторые из этих объектов, которые я пытаюсь передать в этом методе, являются JCombobox
экземпляров. У них есть метод addActionListener
, который делает именно то, что он делает в подклассах AbstractButton
. Но по какой-то причине JCombobox
не наследует от AbstractButton
.
Это заставляет меня использовать шаблон Adapter, чтобы обернуть несовместимые JCombobox
эс в объекты, которые наследуют AbstractButton
:
private static class ComboBoxListenableAdapter extends AbstractButton {
JComboBox combobox;
public ComboBoxListenableAdapter (JComboBox combobox){
this.combobox = combobox;
}
public void addActionListener(ActionListener listener){
combobox.addActionListener(listener);
}
}
Мой вопрос: почему не JCombobox
наследует AbstractButton
? Разве это не имеет смысла?
Почему combobox наследует поведение кнопки? Они оба принимают «ActionListner», да, но еще? – Tom
Итак, по крайней мере, поскольку слушатели действий являются фундаментальной концепцией в графическом интерфейсе, почему примечание делает интерфейс «Listenable» и реализует несколько классов? Я не знаю, просто кажется странным. –
Потому что это не имеет смысла для этого. JComboBox - это не кнопка, она не разделяет многие требования к состоянию кнопки – MadProgrammer