Moo*_*oHa 3 java events swing keylistener actionlistener
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);
}
Run Code Online (Sandbox Code Playgroud)
我如何覆盖keyPressed
KeyListener类的方法,就像我已经完成的那样mouseClicked
,ActionPerformed
我真的不想覆盖keyTyped
它keyReleased
,只是keyPressed
它自己.交互发生在另一个名为VIEW的类中
你不能,因为你只限于Java中的单继承.因此,您必须实现KeyListener,并为这两种方法提供实现(不执行任何操作).
更好的设计是分离责任,并有一个鼠标事件类,另一个用于动作事件,第三个用于关键事件.这些类可以作为匿名内部类实现.
Java不支持多重继承,所以你不能扩展多个类,你不能有这样的东西:
class EventController extends MouseAdapter, KeyAdapter
Run Code Online (Sandbox Code Playgroud)
但是,您可以实现多个接口,但似乎您希望避免这种情况.
现在,这种问题的解决方案始终是相同的,使用组合而不是继承.你可以很容易地拥有两个内部类:一个是扩展的KeyAdapter
,另一个是扩展的MouseAdapter
.然后,当您需要添加侦听器时,您将使用类的字段而不是this
.
像这样的东西:
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
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2021 次 |
最近记录: |