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
繼承。
這迫使我使用適配器模式,以包住不兼容JCombobox
ES在那些繼承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
?這不合理嗎?
爲什麼要組合框繼承按鈕的行爲?他們都接受'ActionListner',是的,但是否? – Tom 2014-09-04 21:55:12
因此,至少由於動作監聽器是GUI中的一個基本概念,爲什麼請注意製作一個'Listenable'接口並且有幾個類實現它?我不知道,看起來很奇怪 – 2014-09-04 21:56:25
因爲它這樣做沒有意義。 JComboBox不是一個按鈕,它不會共享按鈕 – MadProgrammer 2014-09-04 21:56:37