2016-11-11 15 views
2

Javaを使用してGUIアプリケーションを作成しています。メインフレームには、それぞれが特定の機能を持つ異なるセクションがあります。ヘッダーパネルには、[送信]、[元に戻す]、[シャッフル]、[ヘルプ]、[終了]のボタンがあります。ここではサンプルコードは次のとおりです。JButtonが特定のJPanel内にあるかどうかをチェック

JPanel header = new JPanel(); 

JButton submit = new JButton("Submit"); 
header.add(submit); 

JButton undo= new JButton("Undo"); 
header.add(undo); 

JButton shuffle= new JButton("Shuffle"); 
header.add(shuffle); 

JButton help= new JButton("Help"); 
header.add(help); 

JButton quit = new JButton("Quit"); 
header.add(quit); 

さらに私のコードの下、私はクリックされたボタンは、(他のパネルのボタンがあまりにもあります)、ヘッダーパネルにないことを確認する必要があります。

public void actionPerformed(ActionEvent e) 
    { 
     String clicked = e.getActionCommand(); 

     if(!clicked.equals("Submit") && !clicked.equals("Undo") && !clicked.equals("Help")&& !clicked.equals("Quit") && !clicked.equals("Shuffle")){ 


     //some code here 

クリックされたボタンは、ヘッダーパネルでないことを確認するための任意の別の滑らかな印象の方法はありますか?より多くのボタンを含む別のパネルで同様のことをする必要があります。 IF文を使って各ボタンをチェックするのは非効率的で不安定です。

+0

ヘッダーパネルのボタンを異なる方法で処理する必要がある場合は、同じコールバックを使用しないでください。別の 'ActionEvent'リスナーを設定してください – flakes

+0

イベントソースを使用して、Stringsの代わりにインスタンスを比較してください。 – Mordechai

+0

うーん、私はあなたが直面している問題は何か分かりません。 1つのアクションリスナーまたは複数のリスナーを使用することは、それらを含む親コンテナとは何の関係もありません。ボタンが特定のJPanel内にあるかどうかを確認する必要があるのはなぜですか? – user3437460

答えて

1

正直、私はすべてのボタンのアクションを実装しています。より多くのコードが必要になるかもしれませんが、より良い解決策です。あなたはこの道を行くために主張している場合しかし、あなたはあなたが個別にすべてのボタンにaddActionListenerを使用することができ、この

public void actionPerformed(ActionEvent e) { 
     if (!Arrays.asList(PANEL.getComponents()).stream().filter(b -> b instanceof JButton) 
      .map(b -> (JButton) b).filter(b -> 
       b.getText().equals(e.getActionCommand())).findFirst().isPresent()) { 
      // execute code if button is not a child of PANEL 
     } 
    } 
0

を試すことができます。

+0

実際には、次のように各ボタンのActionListenerを追加しました: 'submit.addActionListener(this)' 何か間違っていますか? – meTopia

関連する問題