2017-02-04 4 views
0

Java SwingでJavaでプログラムを書いています。私はカスタムJPanel(私のクラスはJPanelを拡張する)であるクラスを持っています。これはログインページです。パネルには「Enter」というボタンがあります。ボタンを別のクラスから押したときのJava Swingの変更パネル

メインJFrameを作成すると、そのパネルに「ログイン」パネルが追加されます。 「Enter」ボタンが押されたら、「Log In」パネルを外して次のパネルに進みます。

私のフレームを理解するには、Log Inパネルの "Enter"ボタンを押したとき(別のクラスにある)、次のページに進むときはどうすればいいですか?

+2

どのように?私は方法を数えましょう...真剣に、非常に多くがあります。親クラスが 'ActionListener'を' LogIn'パネルに登録させることができますが、もっと頑強な解決策は何らかのMVCを使うことです(例えばhttp://stackoverflow.com/questions/26517856/java)。 (26518274#26518274)と[example](http://stackoverflow.com/questions/27663306/open-a-jpanan-after-and-guide-pre-responselistener-movc-パターンに従う) Press-a-button-in-a-jframe/27663749#27663749) – MadProgrammer

+1

[Observer Pattern](http://www.oodesign.com/observer-pattern.html) – MadProgrammer

+0

ありがとうございました。それを知らなかった。 – user3309479

答えて

0

のJPanelがそれら囲むbeetween CardLayoutに切り替えることができるようにするには:

JPanel cards; 
final static String BUTTONPANEL = "Card with JButtons"; 
final static String TEXTPANEL = "Card with JTextField"; 

//Where the components controlled by the CardLayout are initialized: 
//Create the "cards". 
JPanel card1 = new JPanel(); 
... 
JPanel card2 = new JPanel(); 
... 

//Create the panel that contains the "cards". 
cards = new JPanel(new CardLayout()); 
cards.add(card1, BUTTONPANEL); 
cards.add(card2, TEXTPANEL); 

あなたは "Enter" ボタンにActonListenerを追加する必要があります

JButton enterButton = ... 
enterButton.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent e) { 
       CardLayout cl = (CardLayout)// your reference to the CardLayout here eg. yourJFrame.getContentPane().getLayout(); 
       cl.show(cards, "The name of panel to show, you gave it with the add operation on cardLayout eg. BUTTONPANEL OR TEXTPANEL"); 
     } 

}); 
+2

概念的には、「アクション」管理は「パネル」の責任であり、ナビゲーションは「コンテナ」の責任であるため、「パネル」はジョブが完了したときに「コンテナ」を認識させ、それについて何をすべきかを決めるべきです。これは、単一責任パラダイムへの疎結合と遵守を維持します。私は 'enterButton'がhierarcyにどこにあるのか分からないのでそれだけを言います;) – MadProgrammer

+0

しかし、質問への簡単な答えでそれを詳述しようとします:どのようにボタンクリックでパネルを切り替えるのですか?私のゲストになり、答えを改善してください:) –

+2

[私はする必要はありません](http://stackoverflow.com/questions/26517856/java-and-gui-where-do-actionlisteners-belong-according-to-mvc -pattern/26518274#26518274)または少なくとも[もう一度](http://stackoverflow.com/questions/27663306/open-a-jpanel-after-pressing-a-button-in-a-jframe/27663749#27663749 ):P – MadProgrammer

関連する問題