我有一个小的java应用程序,用于登录LoginFrame并打开一个mainFrame。 我想要做的是隐藏loginFrame并只保留mainFrame,但我不能从控制器引用loginFrame。 thèse是文件。谢谢。
controller.java:
package controller;
import java.awt.Component;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
import gui.FormEvent;
import gui.LoginFrame;
import gui.MainFrame;
import model.User;
public class Controller {
private UserDAO userDAO;
private User user;
private LoginFrame loginFrame;
public void checkConnectedUserAvailability(FormEvent e) {
String username = e.getUsername();
String password = e.getPassword();
User user = new User(username, password);
userDAO = new UserDAO();
if (userDAO.checkUser(user)) {
System.out.println("valid user");
///// WHAT I WANT IS SOMETHING LIKE /////
loginFrame.setvisible(false);
////or///
SwingUtilities.getWindowAncestor((Component) e.getSource()).dispose();
/// but can't refer to loginFrame or use appropriate function without error
MainFrame mainFrame = new MainFrame();
mainFrame.setVisible(true);
} else {
System.out.println("invalid user");
}
}
}
UserDAO.java:
package controller;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;
import model.User;
public class UserDAO {
private User user;
private Connection myConn;
public UserDAO() {
// get db properties
Properties props = new Properties();
try {
props.load(new FileInputStream("demo.properties"));
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String user = props.getProperty("user");
String password = props.getProperty("password");
String dburl = props.getProperty("dburl");
// connect to database
try {
myConn = DriverManager.getConnection(dburl, user, password);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("DB connection successful to: " + dburl);
}
public boolean checkUser(User user){
String username = user.getUsername();
String password = user.getPassword();
String checkSql = "SELECT * FROM users WHERE username = ? AND password = ?";
try {
PreparedStatement checkStmt = myConn.prepareStatement(checkSql);
checkStmt.setString(1, username);
checkStmt.setString(2, password);
ResultSet checkResult = checkStmt.executeQuery();
return checkResult.first();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return false;
}
}
App.java
package gui;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
public class App {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable(){
public void run() {
new LoginFrame();
}
});
}
}
FormEvent.java:
package gui;
import java.awt.Component;
import java.util.EventObject;
public class FormEvent extends EventObject {
private String username;
private String password;
private Object source;
public FormEvent(Object source, String username, String password) {
super(source);
this.username = username;
this.password = password;
this.source = source;
}
public String getUsername() {
return username;
}
public String getPassword() {
return password;
}
public Object getSource() {
return source;
}
}
FormListener.java (interface):
package gui;
import java.util.EventListener;
public interface FormListener extends EventListener {
public void formEventOccurred(FormEvent e);
}
LoginFrame.java:
package gui;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.sql.SQLException;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
import controller.Controller;
import controller.UserDAO;
public class LoginFrame extends JFrame {
private LoginPanel loginPanel;
private Controller controller;
private UserDAO userDAO;
public LoginFrame(){
super("Identification");
Controller controller = new Controller ();
setLayout(new BorderLayout());
loginPanel = new LoginPanel();
add(loginPanel, BorderLayout.CENTER);
setMinimumSize(new Dimension(500, 400));
setSize(600, 500);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
//////// set user connection event ////
loginPanel.setFormListener(new FormListener() {
public void formEventOccurred(FormEvent e) {
controller.checkConnectedUserAvailability(e);
}
});
}
}
LoginPanel.java:
package gui;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
import javax.swing.border.Border;
public class LoginPanel extends JPanel {
private JLabel usernameLabel;
private JTextField usernameField;
private JLabel passwordLabel;
private JPasswordField passwordField;
private FormListener formListener;
private JButton okBtn;
public LoginPanel(){
Dimension dim = getPreferredSize();
dim.width = 250;
setPreferredSize(dim);
usernameLabel = new JLabel("Identifiant");
usernameField = new JTextField(10);
passwordLabel = new JLabel("Mot de passe");
passwordField = new JPasswordField(10);
okBtn = new JButton("OK");
Border innerBorder = BorderFactory.createTitledBorder("Login");
Border outerBorder = BorderFactory.createEmptyBorder(200, 200, 100, 100);
setBorder(BorderFactory.createCompoundBorder(outerBorder, innerBorder));
setLayout(new GridBagLayout());
GridBagConstraints gc = new GridBagConstraints();
/////////// FIRST ROW /////////////////////////
gc.weightx = 1;
gc.weighty = 0.1;
gc.gridx = 0;
gc.gridy = 0;
gc.fill = GridBagConstraints.NONE;
gc.anchor = GridBagConstraints.LINE_END;
gc.insets = new Insets(30, 0, 0, 5);
add(usernameLabel,gc);
gc.gridx = 1;
gc.gridy = 0;
gc.anchor = GridBagConstraints.LINE_START;
gc.insets = new Insets(30, 0, 0, 0);
add(usernameField,gc);
/////////// SECOND ROW /////////////////////////
gc.weightx = 1;
gc.weighty = 0.1;
gc.gridx = 0;
gc.gridy = 1;
gc.anchor = GridBagConstraints.LINE_END;
gc.insets = new Insets(0, 0, 0, 5);
add(passwordLabel,gc);
gc.gridx = 1;
gc.gridy = 1;
gc.anchor = GridBagConstraints.LINE_START;
gc.insets = new Insets(0, 0, 0, 0);
add(passwordField,gc);
/////////// THIRD ROW /////////////////////////
gc.weightx = 1;
gc.weighty = 2.0;
gc.gridx = 1;
gc.gridy = 2;
gc.anchor = GridBagConstraints.FIRST_LINE_START;
gc.insets = new Insets(5, -3, 0, 0);
add(okBtn,gc);
/////// Listener for connection button /////
okBtn.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
String username = usernameField.getText();
String password = passwordField.getText();
FormEvent ev = new FormEvent(this, username, password);
if (formListener != null) {
formListener.formEventOccurred(ev);
}
}
});
}
public void setFormListener(FormListener listener) {
this.formListener = listener;
}
}
MainFrame.java:
package gui;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.io.IOException;
import java.sql.SQLException;
import javax.swing.JButton;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.KeyStroke;
import controller.Controller;
public class MainFrame extends JFrame{
/**
*
*/
private static final long serialVersionUID = 1177541824668221759L;
//private Controller controller;
private JButton firstBtn;
private JButton secondBtn;
private JButton thirdBtn;
public MainFrame() {
super("Selection");
firstBtn = new JButton("First button");
secondBtn = new JButton("Second button");
thirdBtn = new JButton("Third button");
setLayout(new GridBagLayout());
GridBagConstraints gc = new GridBagConstraints();
/////////// One ROW in the middle /////////////////////////
gc.weightx = 1;
gc.weighty = 1;
gc.gridx = 0;
gc.gridy = 1;
gc.fill = GridBagConstraints.NONE;
//gc.anchor = GridBagConstraints.LINE_END;
//gc.insets = new Insets(30, 0, 0, 5);
add(patientsBtn,gc);
gc.gridx = 1;
gc.gridy = 1;
//gc.anchor = GridBagConstraints.LINE_START;
//gc.insets = new Insets(30, 0, 0, 0);
add(gestionBtn,gc);
gc.gridx = 2;
gc.gridy = 1;
//gc.anchor = GridBagConstraints.LINE_START;
//gc.insets = new Insets(30, 0, 0, 0);
add(calendarBtn,gc);
//add(firstBtn, BorderLayout.CENTER);
//add(secondBtn, BorderLayout.CENTER);
//add(thirdBtn, BorderLayout.CENTER);
setMinimumSize(new Dimension(500, 400));
setSize(600, 500);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//setVisible(true);
}
}
User.java(型号):
package model;
public class User {
private String username;
private String password;
public User(String username, String password) {
super();
this.username = username;
this.password = password;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "User [username=" + username + ", password=" + password + "]";
}
}
答案 0 :(得分:0)
在App-class的main方法中,通过添加一个新方法将LoginFrame分配给Controller,即在Controller中:
public void setLoginFrame(LoginFrame loginFrame) {
this.loginFrame = loginFrame;
}
确保您可以从App访问控制器,或者在那里实例化它。