2017-06-06 5 views
0

私はこれにnetbeans GUI Builderを使用しています! 私はJFrameを作成し、JPanelを切り替えるために、CardLayoutでJPanelを内部に配置しました。 JFrameには、さまざまなオプションでメニューが添付されています。今は、ユーザーがログインするまでオプションがグレー表示されます。ログインしているユーザーの前提に従えば、オプションが利用可能になります(参照用に画像を参照)。 The login panelJavaがログインするユーザー

問題は、パネルを切り替えるときにどのユーザーがログインしているのかわからないということです。ログインパネルは、フィールドに何が入力されたかを知り、ログインが正しいかどうかを知る。私は、Jframeの内部で変数を変更するために.getParent()関数を使用しようとしましたが、動作していないようです。しかし、JPanelからJMenu項目を変更するにはどうすればいいですか? (子親関係については、この絵を参照してください)

Relations

+0

モデル/ビュー/コントローラについて確認してください。そのユーザー名は、ビューにはなくモデルに含まれています。 – Jan

+0

申し訳ありませんが、私は本当にあなたが意味するものは得られません。 JFrameには、CurrentUserという名前のパブリック変数があります。どのように私はこれを設定できますか? (私はゲッターとセッターを持っています) –

+0

'String email'と' String password'を含む 'LoginInformation'(Model)のようなJavaクラスを作成し、その情報を保存してGUIを更新します(View) – Frakcool

答えて

0

こんにちは、私はこの簡単な例を開発しました。 (マンタンの方法に焦点を当て、ログイン情報を共有してください)。

@ Janが示唆したように、これはMVCパターンの粗い実装です。ここでは、次のものを分離しようとしています。 モデル:使用しているデータ、サービスおよびデータ変換のコンポーネントレイヤー。 表示:ユーザー コントローラからデータを受け取るコンポーネント:

:ログインを取得するために使用 The MVC pattern and SWING

クラス:ここにあなたのモデル とビューを接続する方法あなたはより多くの情報を入手するためのリンクです

package com.stackoverflow.login; 

import java.awt.BorderLayout; 
import java.awt.Color; 
import java.awt.Frame; 
import java.awt.GridBagConstraints; 
import java.awt.GridBagLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.JButton; 
import javax.swing.JDialog; 
import javax.swing.JLabel; 
import javax.swing.JOptionPane; 
import javax.swing.JPanel; 
import javax.swing.JPasswordField; 
import javax.swing.JTextField; 
import javax.swing.border.LineBorder; 

public class LoginDialog extends JDialog { 

    private static final long serialVersionUID = 1L; 

    // This is the class who will mantain the logged used information 
    private User user; 
    private JTextField tfUsername; 
    private JPasswordField pfPassword; 
    private JLabel lbUsername; 
    private JLabel lbPassword; 
    private JButton btnLogin; 
    private JButton btnCancel; 
    private boolean succeeded; 

    public LoginDialog(Frame parent) { 
     super(parent, "Login", true); 
     // 
     JPanel panel = new JPanel(new GridBagLayout()); 
     GridBagConstraints cs = new GridBagConstraints(); 

     cs.fill = GridBagConstraints.HORIZONTAL; 

     lbUsername = new JLabel("Username: "); 
     cs.gridx = 0; 
     cs.gridy = 0; 
     cs.gridwidth = 1; 
     panel.add(lbUsername, cs); 

     tfUsername = new JTextField(20); 
     cs.gridx = 1; 
     cs.gridy = 0; 
     cs.gridwidth = 2; 
     panel.add(tfUsername, cs); 

     lbPassword = new JLabel("Password: "); 
     cs.gridx = 0; 
     cs.gridy = 1; 
     cs.gridwidth = 1; 
     panel.add(lbPassword, cs); 

     pfPassword = new JPasswordField(20); 
     cs.gridx = 1; 
     cs.gridy = 1; 
     cs.gridwidth = 2; 
     panel.add(pfPassword, cs); 
     panel.setBorder(new LineBorder(Color.GRAY)); 

     btnLogin = new JButton("Login"); 

     btnLogin.addActionListener(new ActionListener() { 

      public void actionPerformed(ActionEvent e) { 
       if (Login.authenticate(getUsername(), getPassword())) { 
        JOptionPane.showMessageDialog(LoginDialog.this, 
          "Hi " + getUsername() + "! You have successfully logged in.", "Login", 
          JOptionPane.INFORMATION_MESSAGE); 
        succeeded = true; 
        user = new User(); 
        user.setPassword(getPassword()); 
        user.setUsername(getUsername()); 
        dispose(); 
       } else { 
        JOptionPane.showMessageDialog(LoginDialog.this, "Invalid username or password", "Login", 
          JOptionPane.ERROR_MESSAGE); 
        // reset username and password 
        tfUsername.setText(""); 
        pfPassword.setText(""); 
        succeeded = false; 

       } 
      } 
     }); 
     btnCancel = new JButton("Cancel"); 
     btnCancel.addActionListener(new ActionListener() { 

      public void actionPerformed(ActionEvent e) { 
       dispose(); 
      } 
     }); 
     JPanel bp = new JPanel(); 
     bp.add(btnLogin); 
     bp.add(btnCancel); 

     getContentPane().add(panel, BorderLayout.CENTER); 
     getContentPane().add(bp, BorderLayout.PAGE_END); 

     pack(); 
     setResizable(false); 
     setLocationRelativeTo(parent); 
    } 

    public String getUsername() { 
     return tfUsername.getText().trim(); 
    } 

    public String getPassword() { 
     return new String(pfPassword.getPassword()); 
    } 

    public boolean isSucceeded() { 
     return succeeded; 
    } 

    public User getUser() { 
     return user; 
    } 

} 

ログインサービス

package com.stackoverflow.login; 
public class Login { 

    public static boolean authenticate(String username, String password) { 
     // hardcoded username and password 
     if (username.equals("bob") && password.equals("secret")) { 
      return true; 
     } 
     return false; 
    } 
} 

保留ユーザー情報のためのクラス: パッケージcom.stackoverflow.login。プログラム

パッケージcom.stackoverflow.loginを実行するための

/** 
* Class used to mantain the login information, it's just for educational 
* purpouses, for prod environment you must implement it in a secure way!! 
*/ 
public class User { 

    private String username; 
    private String 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; 
    } 

} 

クラス。

import java.awt.Dialog; 
import java.awt.Dimension; 
import java.awt.FlowLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.JButton; 
import javax.swing.JDialog; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 

/** 
* Run the program 
*/ 
public class Main { 
    public static void main(String[] args) { 
     final JFrame frame = new JFrame("JDialog Demo"); 
     final JButton btnLogin = new JButton("Click to login"); 
     final JButton btnPanel = new JButton(); 

     LoginDialog loginDlg = new LoginDialog(frame); 
     loginDlg.setVisible(true); 
     // if logon successfully 
     if (loginDlg.isSucceeded()) { 
      btnLogin.setVisible(false); 
      btnPanel.setText("Hi " + loginDlg.getUsername() + "! click to open new frame"); 
      frame.getContentPane().add(btnPanel); 
     } 

     btnPanel.addActionListener(new ActionListener() { 

      @Override 
      public void actionPerformed(ActionEvent e) { 
       JLabel label = new JLabel("Logged user is: " + loginDlg.getUser().getUsername()); 
       JDialog mydialog = new JDialog(); 
       mydialog.setSize(new Dimension(400, 100)); 
       mydialog.setTitle("Another frame"); 
       mydialog.setModalityType(Dialog.ModalityType.APPLICATION_MODAL); 
       mydialog.add(label); 
       mydialog.setVisible(true); 
      } 
     }); 

     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setSize(300, 100); 
     frame.setLayout(new FlowLayout()); 
     frame.getContentPane().add(btnLogin); 
     frame.setVisible(true); 
    } 
} 
関連する問題