2016-10-11 6 views
0

私は、ActionListenerにリンクされた3つの異なるJButtonsを持つGUIクラスを持っています。Javaアクション・リスナーとJButton

ActionListenerクラスでは、どのボタンが以前にクリックされたかをプログラムが記憶できるように、これらの3つの間の相互作用が必要です。例えば

  1. ボタン1がクリックされた場合 - >これを覚えて、その後
  2. button2を次のクリックを取得します:クリックされButton1のための行動相対を行います。

つまり、if節内でbutton1をクリックすると、button2クリックを確認します。

今すぐgetActionCommand()は、クリックされた現在のボタンだけをチェックし、「メモリ」を持たないため、入れ子のif文を使用することはできません。

public void actionPerformed(ActionEvent e){ 
    if (Integer.parseInt(e.getActionCommand()) == 0){ 
    System.out.println("This is Jug 0"); 
    // wont be able to print the following 
    if (Integer.parseInt(e.getActionCommand()) == 1){ 
     System.out.println("This is Jug 1 AFTER jug 0"); //I will never be able to print this 
    } 
    } 
} 
+0

「クリックした次を」とはどういう意味ですか?彼はその間に自分のメールをチェックすることを許されていませんか? –

答えて

2

...

だから、これを達成するための一つの方法は、ブール値でインスタンス変数を作成することですので、trueに設定されるボタンがされていていますそのフラグがtrueに設定されているかどうかを調べることができます。 このアプローチの欠点は、フラグが一度クリックされると常にフラグが真となることです。このフラグをリセットする方法を実装する必要があります。

private boolean hasButtonOneBeenPressed = false; //set this to true when the button has been clicked 

public void actionPerformed(ActionEvent e){ 
    if (Integer.parseInt(e.getActionCommand()) == 0 && !hasButtonOneBeenPressed){ 
    System.out.println("This is Jug 0"); 
    // wont be able to print the following 
    } else if(Integer.parseInt(e.getActionCommand()) == 1 && hasButtonOneBeenPressed){ 
     System.out.println("This is Jug 1 AFTER jug 0"); 
    } else { 
     //do something else 
    } 
} 
+0

私は、アクションリスナーに組み込まれたプロパティのように、これよりも洗練されたアプローチを探していました。しかし、私はこのアプローチをとにかく使っていました。なぜなら、それは仕事を終わらせ、他の答えは同じ静脈にあったからです。 – hmz

1

あなたがたActionListener 行動を与えてくれた - それは、actionPerformedメソッドを持っていますが、あなたはそれを状態与えるためにまだいる - それがどこにあるか、それは覚えておくことができるフィールドとそれに行うのを。ブール値の1つまたは2つのフィールドが必要です。最後のボタンが押されたJButtonフィールドです。この情報は、この情報で何をしたいかによって決まります。

たとえば、メモリゲームをコーディングする場合、最後に押されたボタンを保持するJButtonフィールドを持つことができます。 actionPerformedでフィールドがnullの場合、ユーザーは最初のボタンを押しているので、フィールドに割り当てます。 actionPerformedを押したときにフィールドにボタンがある場合、2番目のボタンが押されたことがわかります。最初のものと同じでない場合は、イメージアイコンを比較し、それに応じて動作し、JButtonフィールドをnullに設定します。

0

ちょうど最後のボタンが押されたと仮定しているので、最後のボタンを格納する変数が必要です。 フルボタンの押された履歴が必要な場合は、押されたボタンを追加する配列を使用してください。

PS:これは、ActionListenersにjava 8ラムダを使用しています。あなたがTODO探しているものの私の理解から、

private void initComponents() { 
    JButton b1 = new JButton(); 
    JButton b2 = new JButton(); 
    JButton b3 = new JButton(); 
    b1.addActionListener((e)-> onButton1Pressed()); 
    b2.addActionListener((e)-> onButton2Pressed()); 
    b3.addActionListener((e)-> onButton3Pressed()); 
} 

int lastButton = -1; 
private void onButton1Pressed() { 
    switch (lastButton) { 
     case 1: 
      break; 
     case 2: 
      break; 
     case 3: 
      break; 
     default: 
      break; 
    } 
    lastButton = 1; 
}  

private void onButton2Pressed() { 
    switch (lastButton) { 
     case 1: 
      break; 
     case 2: 
      break; 
     case 3: 
      break; 
     default: 
      break; 
    } 
    lastButton = 2; 
} 
+0

どのようにb1.addActionListener((e)をonButton1Pressed()のような特定のメソッドに向けるか)。 – hmz

+0

このコード行は、次の処理を行います。 b1.addActionListener((e) - > onButton1Pressed()); – Beowolve

関連する問題