在Java中重写抽象方法
这里是MVC范例的类视图,该类由2个在Java中重写抽象方法,java,swing,model-view-controller,events,user-interface,Java,Swing,Model View Controller,Events,User Interface,这里是MVC范例的类视图,该类由2个JDialogs组成,单击JMenuItem-addEvent和editEvent打开 public class EventView extends javax.swing.JFrame { private javax.swing.JDialog addDialog; private javax.swing.JDialog editDialog; private EventModel model; /** Constructor */
JDialogs
组成,单击JMenuItem
-addEvent
和editEvent
打开
public class EventView extends javax.swing.JFrame {
private javax.swing.JDialog addDialog;
private javax.swing.JDialog editDialog;
private EventModel model;
/** Constructor */
public EventView(EventModel model) {
initComponents();
this.model = model;
updateEventTable();
}
public void addEventListener(ActionListener al) {
addEventButton.addActionListener(al);
}
/* public void clearListener(ActionListener cl) {
clearEventButton.addActionListener(cl);
}*/
public void addDialog(ActionListener ae) {
addEvent.addActionListener(ae);
}
public void editDialog(ActionListener ee) {
editEvent.addActionListener(ee);
}
}
控制器类处理用户与侦听器的交互
public class EventController implements ActionListener {
//... The Controller needs to interact with both the Model and View.
private EventModel model;
private EventView view;
/** Constructor */
public EventController(EventModel model, EventView v){
model = new EventModel();
view = v;
//... Add listeners to the view.
view.addEventListener(new addEventListener());
//view.clearListener(new clearEventListener());
view.addDialog(new addDialogListener());
view.editDialog(new editDialogListener());
}
class addEventListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
String name = "";
String date;
String start="";
String end="";
String venue="";
String details="";
String opportunities="";
String moreOppor="";
try {
name = view.getEventName();
date = view.eventDate().toString();
start = view.startTime();
end = view.endTime();
venue = view.locationWhere();
details = view.getDetails();
opportunities = view.getOpportunities();
moreOppor = view.getMore();
model.addEvent(name,date,start,venue,details,opportunities,moreOppor,end);
view.showSuccess("Event Added!");
} catch (Exception ex) {
view.showError(ex);
}
}
}
class addDialogListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("");
}
}
class editDialogListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("");
}
}
关于本模块,我有两个问题:
EventController
显示了一个错误,该错误不是抽象的,并且不会覆盖我认为已执行的抽象方法操作。如果我错了,请纠正我。我确实有一个额外的JMenuItem,名为deleteEvent
,但我还没有触及它。在NetbeansIDE F.Y.I.上工作System.out.println(“”)代码>,它允许我显示视图类的对话框addDialog
,但我无法访问组件。如何做到这一点?我尝试了查看。
但它没有显示允许设置可见(true)
EventController
没有声明public void actionPerformed(ActionEvent e)
方法。不过,它确实有两个内部类具有该方法,但这并不重要addEventListener
,表明您确实想调用方法addEventListener
,而不是声明一个类,但无法根据您的代码给出明确的建议。1)您忘记在EventController类中实现actionPerformed()方法
2) 您应该将视图设置为addDialogListener和editDialogListener的参数。
比如:
public class addDialogListener implements ActionListener {
private EventView view;
public addDialogListener(EventView view){
this.view = view;
}
@Override
public void actionPerformed(ActionEvent e) {
view.doWhatever();
}
}
然后:
view.addDialog(new addDialogListener(view));
而不是
public class EventController implements ActionListener {
}
这个类由2个JDialogs组成,我一定是盲目的,因为我完全看不到JDialogs,你认为EventController在哪里重写actionPerformed?EventController似乎由两个字段、一个构造函数和三个内部类组成-根本没有方法。@Jaylo只是单词class吗?我不想再添加
私有事件视图
,它已经存在了。我可以删除单词class吗
public class EventController implements ActionListener {
}