36
private JButton jBtnDrawCircle = new JButton("Circle");
private JButton jBtnDrawSquare = new JButton("Square");
private JButton jBtnDrawTriangle = new JButton("Triangle");
private JButton jBtnSelection = new JButton("Selection");

これらのボタンにアクションリスナーを追加して、メインメソッドから呼び出すことができるようにするにはどうすればよいですactionperformedか。クリックされたときに、プログラムで呼び出すことができます。

4

4 に答える 4

62

ふたつのやり方:

1.クラスに ActionListener を実装してから使用します。jBtnSelection.addActionListener(this); 後でメソッドを定義する必要がありますpublic void actionPerformed(ActionEvent e)。ただし、複数のボタンに対してこれを行うと、actionPerformedメソッドが各イベントのソース ( e.getSource()) をチェックしてどのボタンから発生したかを確認する必要があるため、混乱する可能性があります。

2.匿名内部クラスを使用します。

jBtnSelection.addActionListener(new ActionListener() { 
  public void actionPerformed(ActionEvent e) { 
    selectionButtonPressed();
  } 
} );

後で、定義する必要がありますselectionButtonPressed()。アクションを処理するための個々のメソッドへの呼び出しはボタンの定義のすぐ隣にあるため、これは複数のボタンがある場合にうまく機能します。

2、更新。Java 8 でラムダ式が導入されたため、基本的に #2 と同じことを言えますが、使用する文字数は少なくなります。

jBtnSelection.addActionListener(e -> selectionButtonPressed());

この場合eは ActionEvent です。これが機能するのは、ActionListener インターフェイスにメソッドが 1 つしかないためactionPerformed(ActionEvent e)です。

selectionButtonPressed2 番目のメソッドでは、メソッドを直接呼び出すこともできます。この場合、selectionButtonPressed()タイマーがオフになったときなど、他のアクションが発生した場合にも呼び出すことができます (ただし、この場合、メソッドには別の名前が付けられますselectionChanged())。

于 2008-11-12T18:49:17.040 に答える
8

最善の策は、Java Swingチュートリアル、特にButtonsのチュートリアルを確認することです。

短いコードスニペットは次のとおりです。

jBtnDrawCircle.addActionListener( /*class that implements ActionListener*/ );
于 2008-11-12T18:46:08.137 に答える
0

私は完全には従いませんでしたが、アクション リスナーを追加するには、(Abstract Button から) addActionListenerを呼び出すだけです。これで質問に対する完全な回答が得られない場合は、さらに詳細を教えていただけますか?

于 2008-11-12T18:48:27.820 に答える