2016-05-06 6 views
1

私はJPanelで初期化されたJPanelを使用するJFrameを持っています。JPanelクラスからJFrameクラスに値を渡す

これはJFrameのクラスです:LoginPage

public class LoginPage extends JFrame 
{ 
private JPanel contentPane; 
static int cnf; 
static String data; 
private static LoginPage frame; 

/** 
* Launch the application. 
*/ 
public static void main(String[] args) 
{ 
    EventQueue.invokeLater(new Runnable() 
    { 
     public void run() 
     { 
      try 
      { 
       frame = new LoginPage(); 
       frame.setVisible(true); 
      } 
      catch (Exception e) 
      { 
       e.printStackTrace(); 
      } 
     } 
    }); 

    //cnf = chk; 
    if(cnf == 1) 
    { 
     frame.dispose(); 
     JFrame m = new MainPage(); 
     m.setVisible(true); 
    } 
} 

/** 
* Create the frame. 
*/ 
public LoginPage() 
{ 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    setBounds(100, 100, 450, 300); 
    contentPane = new JPanel(); 
    contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); 
    setContentPane(contentPane); 
    contentPane.setLayout(null); 

    JPanel m = new MainLogin(); 
    m.setBounds(0, 0, 448, 271); 
    contentPane.add(m); 
} 
} 

そして、これはJPanelのクラスです:MainLoginパネルと同様にMainLogin

public class MainLogin extends JPanel 
{ 
private JTextField uname; 
private JPasswordField pass; 
public static int chk; 

public MainLogin() 
{ 
    setLayout(null); 

    uname = new JTextField(); 
    uname.setBounds(236, 22, 167, 25); 
    add(uname); 
    uname.setColumns(10); 

    pass = new JPasswordField(); 
    pass.setBounds(236, 53, 167, 25); 
    add(pass); 

    JButton login = new JButton("Login"); 
    login.addActionListener(new ActionListener() 
    { 
     public void actionPerformed(ActionEvent e) 
     { 
      String u = uname.getText(); 
      char[] tp = pass.getPassword(); 
      String p = new String(tp); 

      chk = authentication.verify(u, p); 
      System.out.println(chk); 
     } 
    }); 
    login.setBounds(235, 90, 117, 25); 
    add(login); 
} 
} 

は、メソッドを持つクラスauthenticationがありverify()これは整数を返し、この整数はchkに格納されます。 chkMainLogin JPanelクラスなので、LoginPage JFrameクラスに渡したいと思います。 ファイルを使用する以外にこれを行う方法はありますか?

+0

実装に関しては、 'LoginPage'クラスの' MainLogin.chk'を参照するだけです。 –

+0

1) 'setLayout(null);' Java GUIは、異なるロケールで異なるPLAFを使用する異なるOS、画面サイズ、画面解像度などで動作する必要があります。したがって、ピクセルの完全なレイアウトには役立ちません。代わりに、レイアウトマネージャや[それらの組み合わせ](http://stackoverflow.com/a/5630271/418556)と[空白](http://stackoverflow.com/a/17874718/)のレイアウトパディングとボーダーを使用してください。 418556)。 2)この場合、フレームやパネルを延長する理由は何ですか?継承以上の構成を優先する。 –

答えて

1

メインメソッドではなく、LoginPageインスタンスからメインページを開きます。

LoginPage

public class LoginPage extends JFrame { 

    //other parts 

    public static void main(String[] args) 
    { 
     EventQueue.invokeLater(new Runnable() 
     { 
      public void run() 
      { 
       try 
       { 
        frame = new LoginPage(); 
        frame.setVisible(true); 
       } 
       catch (Exception e) 
       { 
        e.printStackTrace(); 
       } 
      } 
     }); 
    } 

    public LoginPage() { 
     //... 
     JPanel m = new MainLogin(this); 
     //... 
    } 

    public void login(int chk) { 
     JFrame m = new MainPage(); 
     m.setVisible(true); 
     this.dispose(); 
    } 
} 

login()メソッドを追加し、

public class MainLogin extends JPanel 
{ 

private int chk;//no need to be static 

public MainLogin(final LoginFrame loginFrame) 
{ 
    setLayout(null);//null layout is bad 

    //... 
    login.addActionListener(new ActionListener() 
    { 
     public void actionPerformed(ActionEvent e) 
     { 
      //... 
      chk = authentication.verify(u, p); 
      loginFrame.login(chk); 
     } 
    }); 
    //... 
} 
} 
1

のみ、この質問はかなり聞かないのパラメータとしてパネルにログインフレームを渡し、それも持っていますモーダルダイアログやObserver Patternのニーズに応じて可能な解決策の数

を参照してくださいあなたはまた、基本的な答えはここにある対象

に関する詳細な議論のための

を見てみるのが好きかもしれません詳細

ためあなたは責任の領域を分けたがっています。

あなたがする必要がある:

  • は、ユーザーの資格情報
  • 検証し、それらの資格情報

これらは三つの異なるアクションですを確認することの成功に基づいて適切な行動を取る収集すべて分離する必要があります。資格情報を確認するのはログインパネルの責任ではなく、他の誰かの責任です。同様に、それはバリデーション担当者ではありません検証が失敗したときや成功したときに何をすべきかを決定する能力、それは他人の責任です

+0

正確に言えば、私はこの 'LoginPage' JFrameを閉じて、ユーザーが妥当性を確認した後、新しい' MainPage' JFrameをインスタンス化したいと思います。 chkの値が0から1に変更されます。 –

+0

はい、正確には、ログインパネルがユーザーの詳細を収集した後、そのイベントでコントローラに通知して、直接または間接的に資格情報を検証し、その結果に基づいて、どこに行くべきかを決める – MadProgrammer

関連する問題