gpt4 book ai didi

java - 为什么 JCombobox 不是 AbstractButton 的子类?

转载 作者:行者123 更新时间:2023-12-02 05:29:38 26 4
gpt4 key购买 nike

AbstractButton定义方法addActionListenerJButton和其他几个常见的类继承它。

我现在想要编写一个方法,该方法采用支持 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 ?是不是很有意义?

最佳答案

因为 JComboBox 不是 AbstractButton。现在,将 AbstractButton 和 JComboBox 都定义为 ActionListenerAccepter 或类似的接口(interface)可能是有意义的,但这并不是这两个类的定义方式。

假设您想要一种只有一种方法的解决方案(如果不使用建议的重载方法),在这种情况下我只会使用instanceof来保持代码简单(避免像您拥有的适配器那样的东西)。

private void addActionListener(ActionListener listener,
JComponent... possibleActionListenerComponents)
{
for(JComponent c : possibleActionListenerComponents)
if (c instanceof AbstractButton)
((AbstractButton)c).addActionListener(listener);
else if (c instanceof JComboBox)
((JComboBox)c).addActionListener(listener);
}

关于java - 为什么 JCombobox 不是 AbstractButton 的子类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25675474/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com