JavaFX 8.0:如何更改焦点遍历键?

时间:2013-12-30 06:27:12

标签: javafx traversal

常规焦点遍历键是用于向前移动焦点的TAB和用于向后移动焦点的SHIFT + TAB。现在我想使用ENTER键而不是TAB。对此有什么想法吗?

Qinn

2 个答案:

答案 0 :(得分:2)

我就是这样做的:

rootNode.addEventFilter( KeyEvent.KEY_PRESSED, new EventHandler<KeyEvent>()
{
    Robot  eventRobot = new Robot();

    @Override
    public void handle( KeyEvent KV )
    {
        switch ( KV.getCode() )
        {
            case ENTER :
            {
                if ( ! (KV.getTarget() instanceof TextArea) )
                {
                    eventRobot.keyPress( java.awt.event.KeyEvent.VK_TAB );
                    eventRobot.keyRelease( java.awt.event.KeyEvent.VK_TAB );
                    KV.consume();
                }
                break;
            }
            case TAB :
            {
                if ( ! (KV.getTarget() instanceof TextArea) )
                {
                    KV.consume();
                }
                break;
            }
        }
    }
}

答案 1 :(得分:1)

我认为如果你使用两个班级会更好:
KeyCombination用于更精确的密钥检查以及
KeyboardShortcutsHandler移动焦点。

因此无需使用机器人发送标签键

final KeyCombination ENTER = new KeyCodeCombination(KeyCode.ENTER);

rootNode.addEventFilter(KeyEvent.KEY_PRESSED, (KeyEvent KV) -> {
    EventTarget tgt = KV.getTarget();
    if (ENTER.match(KV)) {

        KeyboardShortcutsHandler ksh = new KeyboardShortcutsHandler();
        ksh.traverse((Node) tgt, Direction.NEXT);
        KV.consume();

    } else if ( ! (KV.getTarget() instanceof TextArea) ) {

        KV.consume();

    }
});