MVC Java Swing如何从视图中正确地从数据库获取数据

MVC Java Swing如何从视图中正确地从数据库获取数据,java,swing,model-view-controller,Java,Swing,Model View Controller,我正在按照MVC设计模式编写一个简单的JavaSwingGUI应用程序。我有一个MainFrame.java,它实例化LoginDialog.java(模态JDialog)。然后,用户使用用户名和密码登录,或者可以注册(通过单击Jbutton)实例化RegisterDialog.java(从LoginDialog实例化JDialog)。我还有一个Controller.java类,它连接到Database.java,并允许与数据库交互。大型机对象可以通过控制器对象与数据库交互。在RegisterD

我正在按照MVC设计模式编写一个简单的JavaSwingGUI应用程序。我有一个MainFrame.java,它实例化LoginDialog.java(模态JDialog)。然后,用户使用用户名和密码登录,或者可以注册(通过单击Jbutton)实例化RegisterDialog.java(从LoginDialog实例化JDialog)。我还有一个Controller.java类,它连接到Database.java,并允许与数据库交互。大型机对象可以通过控制器对象与数据库交互。在RegisterDialog上,当用户按submit时,我想验证用户名是否已被使用。如何从RegisterDialog从数据库中获取数据?另外,我如何从LoginDialog获取数据(我是否应该让大型机侦听将从LoginDialog触发的DataRequestEvent?)


如前所述,“并非所有交互都需要通过应用程序的控制器”,但身份验证和注册是控制器需要管理的合理候选对象。如上所述,控制器可以直接操作数据模型,侦听视图应该相应地进行更新。如图所示,Swing提供了许多实现的方法来处理此类通知。确切的细节取决于应用程序如何处理模态,但您的身份验证和注册对话框可以触发适当的
PropertyChangeEvent
,根据需要通知侦听器。可以找到示例和。

谢谢你的回答,你能给我推荐一本书或一个网站,教我更多关于Swing开发(专业水平)的知识吗?我从一开始就阅读了很多源代码。
public class Controller {
    private Database db;
    public Controller(){
    db = new Database();
    }
}
public class MainFrame extends JFrame{
    private LoginDialog loginDialog;
    private Controller controller;
    public MainFrame(){
        controller = new Controller();
        loginDialog = new LoginDialog();
        loginDialog.setVisible(true);
        //...
    }
}
public class LoginDialog extends JDialog{
    //form fields...
    private JButton regBtn;
    private RegisterDialog registerDialog;
    public LoginDialog(){
        registerDialog = new RegisterDialog();
        regBtn = new JButton("Register");
        regBtn.addActionListener(new ActionListener(){
            registerDialog.setVisible(true);
        });
    }
}

public class RegisterDialog extends JDialog{
    //...
    private JButton submitBtn;
    public RegisterDialog(){
        submitBtn = new JButton();
        submitBtn.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e){
                validateUsername();
            }
        });
    }
    public void validateUsername(){
        //here I need to check whether username is already in DB (sqlite)
    }       
}