java在一个类中重写多个类的多个方法
public class EventController extends MouseAdapter implements ActionListener {
private EventModel model;
private EventView view;
String tableClick;
Events events;
/** Constructor */
public EventController(EventModel myModel, EventView myView){
model = myModel;
view = myView;
}
public void setUpListeners() {
this.view.addEventButton.addActionListener(this);
this.view.addEventMenuItem.addActionListener(this);
this.view.editEventMenuItem.addActionListener(this);
this.view.tableEvent.addMouseListener(this);
}
@Override
public void actionPerformed(ActionEvent e){
Object button = e.getSource();
if(button==this.view.addEventButton) {
setEventDetails();
}
}
@Override
public void mouseClicked(java.awt.event.MouseEvent event) {
int rowSelected = view.tableEvent.getSelectedRow();
//blahblahblah
view.changeDisplay(events);
}
我如何重写KeyListener类的方法keyPressed
,就像我对mouseClicked
和ActionPerformed
所做的那样。我真的不想重写keyTyped
和keyReleased
,只重写keyPressed
。交互发生在另一个名为VIEW的类中
# 1 楼答案
搜索复合和外观模式,以重用代码
# 2 楼答案
Java不支持多重继承,因此您不能扩展多个类,您不能有如下内容:
但是,您可以实现多个接口,但似乎希望避免这种情况
现在,这类问题的解决方案总是一样的,使用组合而不是继承。您可以很容易地拥有两个内部类:一个扩展
KeyAdapter
,另一个扩展MouseAdapter
。随后,当需要添加侦听器时,使用类的字段而不是this
大概是这样的:
# 3 楼答案
Swing提供了Adapter classes来帮助重写方法,而无需在侦听器类中执行所有这些方法
如果只需要实现KeyListener的一些方法,那么应该使用KeyAdapter类
# 4 楼答案
不要直接在EventController中提供侦听器,而是在内部类中进行。例如,一个内部类可以扩展MouseAdapter,并调用EventController方法来完成实际工作。不同的内部类可以扩展KeyAdapter,并调用其他EventController方法
将内部类的实例附加为侦听器,而不是EventController本身
# 5 楼答案
你不能这样做
一个类只能从另一个类扩展(Java中禁止多重继承)
一个类可以实现多个接口,但是由于接口没有提供方法的实现,因此必须提供它(或者声明类
abstract
,甚至声明一个interface
)既然您已经扩展了
MouseAdapter
,就必须实现ActionListener
me# 6 楼答案
不能这样做,因为在Java中您仅限于单一继承。因此,您必须实现KeyListener,并为这两个方法提供一个实现(它什么也不做)
更好的设计是将责任分开,并为鼠标事件创建一个类,为动作事件创建另一个类,为关键事件创建第三个类。这些类可以实现为匿名内部类