2016-08-09 5 views
0

LoginFrameでログインし、メインフレームを開くと開くJavaアプリケーションがあります。 私がしたいのは、loginFrameを隠してmainFrameだけを残しておくことですが、コントローラからloginFrameを参照することはできません。ファイルは です。ありがとうございました。ログインフォームをJavaのコントローラーから隠す方法

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 + "]"; 
    } 
} 
+2

関連するコードのみを提供してください。潜在的なヘルパーはコードを読むのに時間を費やす必要はありません。 –

+0

合意。 http://stackoverflow.com/help/mcveおよびhttp://stackoverflow.com/help/how-to-ask – Daenarys

+0

を参照してください。最初の投稿、申し訳ありません。 –

答えて

0

Apの主な方法P-クラス、コントローラにすなわち、新しいメソッドを追加して、コントローラにLoginFrameを割り当てる:

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

あなたがアプリからづけしたり、それがそこにインスタンス化されthqtのいずれかのコントローラを持っていることを確認してください。

+0

それは動作します! App-classを変更してコントローラをインスタンス化する必要はありませんでした。コントローラとloginFrameの間の接続は、あなたの関数から始まりました。ありがとうございました。 –

関連する問題