在Java中重写抽象方法

在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 */

这里是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 */
    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 {
    
    }