将控制器应用于DAO级

时间:2019-11-07 20:18:23

标签: java user-interface model-view-controller controller

我正在尝试学习MVC模式并在我的程序中实现它,该程序基本上是一个与DAO类进行对话的登录屏幕,它使用户可以通过数据库登录。现在,我有一个用于登录屏幕的视图类,以及一个具有访问UserDAO类的方法的控制器。每当按下登录按钮时,都应该使用控制器中的方法,但现在它会跳过该方法并运行它:panelView.programmainframe();,该方法会对该方法进行垃圾处理,直到我不得不强制退出程序为止。 这是我的看法:

package view;
import java.awt.Color;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.*;
import dao.UserDAO;
import db.DemoDB;

public class LoginView extends JFrame {

    private static final long serialVersionUID = 1L;
    Controller controller = new Controller();

    JLabel l = new JLabel("Användarnamn:");
    JLabel l1 = new JLabel("Lösenord:");
    JTextField textfieldUsername = new JTextField(10);
    JPasswordField textfieldPassword = new JPasswordField(10);
    JButton loginButton = new JButton("Logga In");
    PanelView gui = new PanelView();

    public LoginView() throws IOException {

        gui.mainFrame.setVisible(false);

        loginButton.addActionListener(n -> {
            try {
                controller.loginListener();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        });

        DemoDBSingleton = DemoDB.getInstance();
        logInFrame();

    }

    public JFrame logInFrame() throws IOException {
        this.setSize(800, 600);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setVisible(true);

        JPanel p = new JPanel();
        p.setBackground(new Color(224, 255, 255));
        p.setLayout(null);

        l.setFont(new Font("Tahoma", Font.PLAIN, 21));
        l.setBounds(102, 173, 169, 41);
        p.add(l);
        textfieldUsername.setHorizontalAlignment(SwingConstants.CENTER);
        textfieldUsername.setFont(new Font("Tahoma", Font.PLAIN, 16));
        textfieldUsername.setBounds(303, 177, 169, 41);
        p.add(textfieldUsername);
        l1.setFont(new Font("Tahoma", Font.PLAIN, 21));
        l1.setBounds(102, 290, 93, 26);
        p.add(l1);
        textfieldPassword.setHorizontalAlignment(SwingConstants.CENTER);
        textfieldPassword.setFont(new Font("Tahoma", Font.PLAIN, 16));
        textfieldPassword.setBounds(303, 287, 169, 41);
        p.add(textfieldPassword);
        loginButton.setBounds(334, 375, 110, 52);
        p.add(loginButton);

        this.getContentPane().add(p);

        JCheckBox hidepasswordBox = new JCheckBox("Visa Lösenord");
        hidepasswordBox.setBackground(new Color(224, 255, 255));
        hidepasswordBox.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                if (hidepasswordBox.isSelected()) {
                    textfieldPassword.setEchoChar((char) 0);
                } else {
                    textfieldPassword.setEchoChar('*');
                }

            }
        });
        hidepasswordBox.setBounds(303, 335, 110, 23);
        p.add(hidepasswordBox);
        return this;
    }



    public static void main(String[] args) throws IOException {
        new LoginView();

    }
}

这是我的控制器:

public class Controller {

    private PanelView panelView;
    private LoginView loginView;

    DemoDB DemoDBSingleton = null;
    UserDAO userDao = new UserDAO();

    public Controller() throws IOException {

        panelView = new PanelView();
        loginView = new LoginView();

    }

    public void loginListener() throws IOException {

        if (userDao.login(loginView.textfieldUsername.getText(),loginView.textfieldPassword.getText())) {
            JOptionPane.showMessageDialog(null, "Välkommen " + loginView.textfieldUsername.getText() + "!");
            panelView.programmainframe();
            this.loginView.setVisible(false);
        } else
            JOptionPane.showMessageDialog(null, "Felaktigt användarnamn eller lösenord!!!");
    }



}

0 个答案:

没有答案