ツリー選択リスナーで、選択の変更がキーボードイベントまたはマウスイベントのどちらによって行われたかを知る方法はありますか?この2つで異なるイベントをトリガーしたいと思います。
ありがとう!
マウスリスナーとキーリスナーを追加し、それらが選択したものを手動で計算して、そこで特定のことを行うことができます。
はい、選択の変更がキーボードイベントまたはマウスイベントのどちらから発生したかを知ることができます。選択変更リスナー内で、次のコードを使用します。
import java.awt.EventQueue;
import java.awt.AWTEvent;
import java.awt.event.*;
...
AWTEvent event = EventQueue.getCurrentEvent();
if ( event instanceof MouseEvent) {
System.out.println("selection change: got mouse event");
} else if ( event instanceof KeyEvent) {
System.out.println("selection change: got key event");
} else {
System.out.println("selection change: got something else");
}
これは、すべてのタイプのAWTおよびSwingイベントで機能するはずです。すべての場合に、現在処理されているイベントを通知する必要があります。ただし、最高レベルのイベント、つまり、にディスパッチされたイベントのみが通知されますEventQueue
。OPの場合、そのイベント(マウスまたはキーイベント)は、後で選択変更「イベント」をトリガーします。これは、AWTまたはSwingの観点からは実際にはイベントではありませんが、クラスから1つと考えることができます。名前はTreeSelectionEvent
。ただし、それはすべて、イベントの処理方法と、イベントがを使用するかどうかによって異なりますEventQueue
。
AbstractTableModel.fireTableDataChanged
リスナーメソッドが他のイベント(たとえば、または)を発生させるコードを呼び出す場合JPanel.add
、現在のイベントが新しい現在のイベントによって上書きされる可能性があることに注意してください(終了すると、関心のあるイベントに復元されません)。したがって、私が概説するアプローチが機能するためには、処理の早い段階で現在のイベントを取得して保存する必要があります。これは、キーとマウスのイベントリスナーを提案する他のアプローチよりもはるかに堅牢になると思います。私は今、このアプローチをうまく使っています。