在 focusGained 事件中检测向后遍历?
Detecting backwards traversal in focusGained event?
如果通过向后遍历(即 transferFocusBackward)而不是向前遍历获得焦点,我如何在 focusGained 事件中检测?
我已经设置了多个自定义 JTables,它们可以通过它们的单元格向前和向后切换。如果用户跳出 table,即最后一个向前,第一个向后,我希望分别选择第一个或最后一个单元格。使用 changeSelection 方法选择一个单元格很容易,但是我如何知道遍历发生在哪个方向?
我找不到访问此信息的直接方法。
然而,此信息似乎在 FocusEvent
:
中可用
FocusListener fl = new FocusAdapter()
{
public void focusGained(FocusEvent e)
{
String eventText = e.toString();
if (eventText.contains("TRAVERSAL_FORWARD"))
System.out.println("forward");
else if (eventText.contains("TRAVERSAL_BACKWARD"))
System.out.println("backward");
}
};
自 Java9 以来,存在一种访问此信息的方法:
FocusListener fl = new FocusAdapter()
{
public void focusGained(FocusEvent e)
{
System.out.println(e.getCause());
}
};
getCause()
方法 returns FocusEvent.Cause
类型的枚举常量。
如果通过向后遍历(即 transferFocusBackward)而不是向前遍历获得焦点,我如何在 focusGained 事件中检测?
我已经设置了多个自定义 JTables,它们可以通过它们的单元格向前和向后切换。如果用户跳出 table,即最后一个向前,第一个向后,我希望分别选择第一个或最后一个单元格。使用 changeSelection 方法选择一个单元格很容易,但是我如何知道遍历发生在哪个方向?
我找不到访问此信息的直接方法。
然而,此信息似乎在 FocusEvent
:
FocusListener fl = new FocusAdapter()
{
public void focusGained(FocusEvent e)
{
String eventText = e.toString();
if (eventText.contains("TRAVERSAL_FORWARD"))
System.out.println("forward");
else if (eventText.contains("TRAVERSAL_BACKWARD"))
System.out.println("backward");
}
};
自 Java9 以来,存在一种访问此信息的方法:
FocusListener fl = new FocusAdapter()
{
public void focusGained(FocusEvent e)
{
System.out.println(e.getCause());
}
};
getCause()
方法 returns FocusEvent.Cause
类型的枚举常量。