2012-03-13 24 views
0

私は3つのクラスを持っています.1つはメインクラス、もう1つはawt + swingを使って4つのボタンで基本ウィンドウを作るGUIクラスです。Java ActionListenerクラスで変数を見つけることができません。

//BEGIN ADD ACTION LISTENERS 
handle_events event_handler=new handle_events(); 
home_b.addActionListener(event_handler); 
my_account_b.addActionListener(event_handler); 
my_history_b.addActionListener(event_handler); 
exit_b.addActionListener(event_handler); 
//END ADD ACTION LISTENERS 

マイhandle_eventsクラスには、次のようになります。

import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

class handle_events implements ActionListener 
{ 
    public handle_events(){} 

    public void actionPerformed(ActionEvent e) 
    { 
     if(e.getSource==home_b) {do stuff;} 
      //etc    
    } 


} 
//END EVENT HANDLER CLASS 

問題はhome_bは関係なく、私は何をすべきかの、のActionListenerクラスによって発見することができないということです。あなたのすべての協力に感謝します。

+0

Javaの命名規則を覚えておいてください。 – kleopatra

答えて

1

handle_eventsクラスは別のスコープにあるため、home_b変数は決して見つかりません。これが、多くの人がイベントハンドラの匿名リスナクラスを使用する理由です。

​​

このようにそれをやっての最大の利点は、あなたがそのハンドラを行う必要があるどのようなコードで右クリックし、そこにそれを知っている、元が誰であるかどうかを確認する必要がないということです。

+0

はい、私は非常に整理されているようにネストされたクラスを避けようとしていたことは知っています(少なくとも私は、私はクラスをその機能に基づいて非常に分かち合いたいと思っていました。 それにもかかわらず、私は入れ子にされた匿名クラスに戻り、すべて正常に動作しています。 –

3

handle_eventsには参照がないためです。あなたは、コンストラクタでそのへの参照を追加することができ、次のいずれか

class handle_events implements ActionListener 
{ 
    private Object home_b; 

    public handle_events(Object home_b){ 
     this.home_b = home_b; 
    } 

    public void actionPerformed(ActionEvent e) 
    { 
     if(e.getSource==home_b) {do stuff;} 
      //etc    
    } 
} 

、 (あなたがすることになっているものは何でもタイプhome_bを持つオブジェクトを置き換える場合)か、どこで、あなたはクラスで、ネストされたものにhandle_eventsクラスを変換することができますそれらのアクションリスナーを初期化するコードを持っています。

あなたがそうするのが正当な理由がない限り、一般的なコーディングスタイルを遵守し、最初に大文字のクラス名を宣言し、アンダースコアを使用しないでください:HandleEvents

+0

クラスのネーミングチップに感謝します –

関連する問題