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