如何在java中隐藏控制器的登录框架

时间:2016-08-09 10:03:05

标签: java swing

我有一个小的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 + "]";
    }   
}

1 个答案:

答案 0 :(得分:0)

在App-class的main方法中,通过添加一个新方法将LoginFrame分配给Controller,即在Controller中:

    public void setLoginFrame(LoginFrame loginFrame) {
           this.loginFrame = loginFrame;
    }

确保您可以从App访问控制器,或者在那里实例化它。