2011-07-21 8 views
-1

スイングのデフォルトJComboBoxをオーバーライドするアプリケーションです。それをMyComboBoxと呼ぶ。このバージョンのComboBoxはFocusListenerを実装し、focusGainedとfocusLostの2つのメソッドを含みます。FocusListenerをオーバーライドする方法 - スウィング

さて、アプリケーションのパネルの一つに、フォームはこのタイプのコンボボックスが含まれています

MyComboBox aMyComboBox = new MyComboBox(); 

私はそのようなこれにリスナーを追加したい:

aMyComboBox.addFocusListener(new FocusListener() { 
    public void focusLost(FocusEvent e) { 
     //Do something here 
    } 
    public void focusGained(FocusEvent e) { 
     //Do something else 
    } 
}); 

しかし、コードを実行すると、これらのメソッドに渡されることはありませんが、MyComboBoxクラスからfocusGained/lostだけが実行されます。

既にFocusListenerを実装しているオブジェクトにリスナーを追加する方法はありますか?

+0

あなたは 'MyComboBox'にアクセスできませんか?そのクラスが既に実装している場合、なぜ新しい 'FocusListener'を追加するのですか? – Moonbeam

+1

a)JSomethingをサブクラス化しないでください(拡張されていない、使用されることを意図しています)b)publicな使用目的ではない、つまりMyComponentがSomeListenerを実装しないapiを公開するc)FocusListenerを使用する、レベル。あなたが主張している場合、コンボはそれ自身決してフォーカスオーナーにならない複合コンポーネントであることに注意してください(コンボとそのすべての子にリスナーを再帰的に追加する方法についてはsnoracleチュートリアルを参照してください) – kleopatra

+0

Ok、MyComboBoxは汎用のFocusListenerそれは私が気にしないものをする。 MyComboBoxのインスタンスをフォーム内に配置すると、focusLostがトリガされたときにロジックを実行したいと考えています。だから私は、オブジェクトのインスタンスにFocusListenerを追加したいと思います。その実行可能かどうかわからない? – Cygnusx1

答えて

2

追加FocusListener should work MyComboBoxで使用されるインスタンスがイベント(AWT event consumption)を消費しない限り、

通常のJComboBoxで例を試してみてください。これは問題の原因を絞り込むのに役立ちます。

関連する問題