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

时间:2017-01-23 11:16:34

标签: java swing

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

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行我将candidateForm面板传递回控制器,然后将其称为' s' addSubmitListener()'方法,它将自定义侦听器添加到按钮。

这看起来像添加监听器的正确方法吗?我应该在Controller中以这种方式定义CandidateListener吗?或者可以在子JPanel中创建一个匿名类?

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

1 个答案:

答案 0 :(得分:1)

如前所述here,“并非所有交互都需要通过应用程序的控制器。”您的方法不是错误,但可能会缩小。考虑使用Action封装功能,如建议的here。在数据库上下文中,这个简单的example会创建一个Action,将查询结果标签添加到JTabbedPane。这个更精细的example使用SwingWorker在后​​台查询数据库;相应的Action可能会实例化工作人员execute()