提问者:小点点

MVC,并将侦听器添加到包含在其他Componenet中的JPanel


我试图在我的程序中实现MVC,这是目前我的控制器类:

public class Controller {

    private DatabaseModel model;
    private View view;

    public Controller(View view, DatabaseModel model){
        this.model = model;
        this.view = view;

        this.view.getMainPanel().getCandidateForm().
                  addSubmitListener(new CandidateListener());
    }

    class CandidateListener implements ActionListener{
        public void actionPerformed(ActionEvent e){
            System.out.println("ACTION");
        }
    }
}

因为我的视图包括几个私有子JPanels-MainFrame和CandidateForm-后者是按钮所在的位置,所以在第10行,我将候选表单面板返回给控制器,然后调用它的addSubmitListener()方法,该方法将自定义侦听器添加到按钮中。

这似乎是添加侦听器的正确方法吗?我应该在Controller中以这种方式定义CandidateListener吗?或者在子JPanel中创建一个匿名类?

对于MVC和听众的最佳实践的任何其他建议也将不胜感激!


共1个答案

匿名用户

正如这里所指出的,“并非每个交互都需要通过应用程序的控制器。”你的方法没有错,但它可能扩展不佳。考虑使用Action来封装功能,如这里所建议的。在数据库上下文中,这个简单的示例创建了一个Action,它将查询结果选项卡添加到JTabbedPane。这个更复杂的示例使用SwingWorker在后台查询数据库;相应的Action可能会实例化worker并执行()它。