java – 在一个类中覆盖许多类的许多方法
发布时间:2020-12-15 02:04:55 所属栏目: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
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的类中 解决方法
Java不支持多重继承,所以你不能扩展多个类,你不能有这样的东西:
class EventController extends MouseAdapter,KeyAdapter 但是,您可以实现多个接口,但似乎您希望避免这种情况. 现在,这种问题的解决方案始终是相同的,使用组合而不是继承.您可以轻松拥有两个内部类:一个扩展KeyAdapter,另一个扩展KeyAdapter.然后,当您需要添加侦听器时,您将使用类的字段而不是此字段. 像这样的东西: import java.awt.event.ActionListener; import java.awt.event.KeyAdapter; import java.awt.event.MouseAdapter; public class EventController { private EventModel model; private EventView view; String tableClick; Events events; private MouseAdapter mouseListener = new MouseAdapter() { @Override public void mouseClicked(java.awt.event.MouseEvent event) { int rowSelected = view.tableEvent.getSelectedRow(); //blahblahblah view.changeDisplay(events); } }; private KeyAdapter keyAdapter = new KeyAdapter() { public void keyTyped(java.awt.event.KeyEvent e) { // Perform here whatever is needed // You also have access to your enclosing instance EventController.this and its methods } }; private ActionListener actionListener = new ActionListener() {@Override public void actionPerformed(ActionEvent e){ Object button = e.getSource(); if(button==this.view.addEventButton) { setEventDetails(); } } /** Constructor */ public EventController(EventModel myModel,EventView myView){ model = myModel; view = myView; } public void setUpListeners() { this.view.addEventButton.addActionListener(actionListener); this.view.addEventMenuItem.addActionListener(actionListener); this.view.editEventMenuItem.addActionListener(actionListener); this.view.tableEvent.addMouseListener(mouseListener); // Here you can also add the keyadapter to your views } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |