-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を実装しているオブジェクトにリスナーを追加する方法はありますか?
あなたは 'MyComboBox'にアクセスできませんか?そのクラスが既に実装している場合、なぜ新しい 'FocusListener'を追加するのですか? – Moonbeam
a)JSomethingをサブクラス化しないでください(拡張されていない、使用されることを意図しています)b)publicな使用目的ではない、つまりMyComponentがSomeListenerを実装しないapiを公開するc)FocusListenerを使用する、レベル。あなたが主張している場合、コンボはそれ自身決してフォーカスオーナーにならない複合コンポーネントであることに注意してください(コンボとそのすべての子にリスナーを再帰的に追加する方法についてはsnoracleチュートリアルを参照してください) – kleopatra
Ok、MyComboBoxは汎用のFocusListenerそれは私が気にしないものをする。 MyComboBoxのインスタンスをフォーム内に配置すると、focusLostがトリガされたときにロジックを実行したいと考えています。だから私は、オブジェクトのインスタンスにFocusListenerを追加したいと思います。その実行可能かどうかわからない? – Cygnusx1