在 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 类型的枚举常量。