2

树选择侦听器有没有办法知道选择更改是由键盘事件还是鼠标事件引起的?我想为这两个触发不同的事件。

谢谢!

4

2 回答 2

2

您可以添加一个鼠标监听器和一个按键监听器,然后手动计算他们选择的那个,然后在那里执行您的特定操作。

于 2012-08-06T19:53:56.100 回答
0

是的,您可以知道选择更改是源自键盘事件还是鼠标事件。在选择更改侦听器中,使用以下代码:

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 而言,这并不是一个真正的事件,但您可能会认为它是因为它的类被命名为TreeSelectionEvent。但这一切都取决于事件的处理方式以及它是否使用EventQueue.

请注意,如果侦听器方法调用的代码会触发其他事件(例如,AbstractTableModel.fireTableDataChanged或者JPanel.add),则当前事件可能会被新的当前事件覆盖(并且完成后不会恢复到您感兴趣的事件)。因此,对于我概述的工作方法,您需要在处理的早期获取当前事件并存储它。我相信这将比建议 Key and Mouse 事件侦听器的其他方法更强大。我现在成功地使用了这种方法。

于 2021-09-14T19:37:45.493 回答