2011-10-20 3 views
4

私はSwingを使い慣れていて、アクションリスナーの助けが必要です。アクションリスナーをユーザーにする方法

button.addActionListener(myFunc); 

public void myFunc(ActionEvent e) 
{ 
    // Do something 
} 

はこれが可能である:

button.addActionListener(new ActionListener() { 
    public void actionPerformed(ActionEvent e) { 
     // Do something 
    } 
}); 

は、しかし、私はもっとこのような何かをしたい:私は彼らがこの例のように使用見たことがありますか?

+0

*「私はスイングには新しく、アクションリスナーにはいくつかの助けが必要です。」*アクションリスナーは、スイングではなくAWTです。 ;) –

答えて

7

つの可能なアプローチ - あなたはちょうどあなたが与える最初の例の中から直接myFuncというメソッドを呼び出すことができ、次のいずれか

button.addActionListener(new ActionListener() { 
    public void actionPerformed(ActionEvent e) { 
     myFunc(e); 
    } 
}); 

を...それとも、ActionListenerを実装する内部クラスを定義していることを使用することができます:未来のノート、Javaの8は(2013年、ので、あなたの息を保持していない)の棚にヒットオン

class MyActionListener implements ActionListener { 
    public void actionPerformed(ActionEvent e) { 
     //Your code 
    } 
} 

button.addActionListener(new MyActionListener()); 

あなたはクロージャを使用して、より簡潔に、これを行うことができるでしょう。

+0

あなたは?あなたはSwingで実際にジェネリックスを使用することはできません。 – Thufir

+0

@Thufirジェネリックスを使用するスイングにはいくつかのケースがありますが、閉鎖が同様の方法で改造されていないと非常に驚きます。 – berry120

3

かなり単に:

button.addActionListener(new ActionListener() { 
    public void actionPerformed(ActionEvent e) { 
     myFunc(e); 
    } 
}); 


public void myFunc(ActionEvent e) 
{ 
    // Do something 
} 

...私はそれがビット定型知っている...しかし、Javaは、パラメータとして関数を渡すことをサポートしていません。ここ

4

追加のクラスを避けたい場合は、反射型トランポリンクラスを使用できます。

http://softsmithy.sourceforge.net/lib/docs/api/org/softsmithy/lib/swing/action/ReflectiveXAction.html

反射行動について読むために、より:JavaのシリーズブックJava Platform Performance Strategies and TacticsChapter 6.2.3, p. 73をスティーブ・ウィルソンとJeff Kesselmanで私は、このためのユーティリティクラスを書きました。

チュートリアル:

http://softsmithy.sourceforge.net/lib/docs/tutorial/swing/action/index.html

のMaven:

<dependency> 
    <groupId>org.softsmithy.lib</groupId> 
    <artifactId>lib-core</artifactId> 
    <version>0.1</version> 
</dependency> 

ダウンロード:

http://sourceforge.net/projects/softsmithy/files/softsmithy/v0.1/

3

方法は、そうでない場合は、ActionListenerを返した場合にのみ可能ですいいえ。もちろん、ActionEventの処理を別の方法に委任することは完全に有効です。

1

あなたは匿名クラスを使用できるJavaの下のバージョンで、Java 8ラムダ式

button.addActionListener(ae -> myFunc(ae)); 

それとも他の回答に代わるものとしてを使用したい場合。

ActionListener myFunc = new ActionListener() { 
     @Override 
     public void actionPerformed(ActionEvent e) { 
      //code 
     } 
    }; 

    button.addActionListener(myFunc); 
関連する問題