Применение контроллера к DAO-классу - PullRequest
0 голосов
/ 07 ноября 2019

Я пытаюсь изучить шаблон 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!!!");
    }



}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...