2017-05-22 9 views
1

私は学生で、グラフィックスを始めたばかりです。私はactionListenerを使って2つの割り当てを行った。両方の割り当てでは、私のコンストラクタは、このコードを持っている:actionListenerの使用

JButton.setActionListener(this) ; 

だからここに私の質問ではなく、「この」キーワードで、私は別のクラスを使用した場合に何が起こるかありますか?

JButton.setActionListener(someClass) ; 
+2

これは多くのことに依存します。最初に両方のクラスが 'ActionListener'を実装する必要があります。別のクラスを使用すると、ボタンが定義されているクラスへの参照を失うことになります(ただし、 'ActionEvent#getSource'メソッドで参照を取得することはできますが、 – MadProgrammer

+0

[ボタン、チェックボックス、ラジオボタンの使い方](http://docs.oracle.com/javase/tutorial/uiswing)を参照することを強くおすすめします。 /components/button.html)と[アクションリスナーの作成方法](http://docs.oracle.com/javase/tutorial/uiswing/events/actionlistener.html) – MadProgrammer

+2

基本的には正しいことです。あなたが既存のクラスにメソッドを追加することができ、コードのスペースが少なくて済むため、 'this'は短い例で多く使われています。通常は、そのようなクラスを再利用したくない場合は、懸念を分離したいので、別のクラスをアクションリスナーにする必要があります。 – markspace

答えて

0

あなたがたActionListenerのインスタンスを追加することができます(たとえ匿名クラスが許可されています)。 だからあなたのようなものを行うことができます。

new JButton().addActionListener(new ActionListener() { 
     @Override 
     public void actionPerformed(ActionEvent e) { 
      //YOUR CODE 
     } 
    }); 

それとも、他のクラス(Fooのそれを呼び出すことができます)を実装し、

new JButton().addActionListener(new Foo()); 

そして、あなたはあなたにも使用できる関数型プログラミングが好きな場合にそれを追加することができますがラムダ式;)

+0

もちろん、Foo.classはActionListenerを実装する必要があります –

0

それは一緒にactionperformed()法のようなその実装方法と、そのクラスsomeClass必見implementsActionListenerことを意味します。

同様:

public class SomeClass implements ActionListener { 


     public SomeClass() { 

       //Could do things here 
     } 

     public void actionPerformed(ActionEvent e) { 
       //DDo things when button is clicked. 
       System.out.println("The button has been clicked"); 
     } 

} 
+0

'Button'はAWTベースのクラスで、それを避けるのに最適です – MadProgrammer

+0

本当に@MadProgrammer、それは残念です。 –

関連する問題