JavaFX8.0:如何更改焦点遍历键?

JavaFX8.0:如何更改焦点遍历键?,javafx,traversal,Javafx,Traversal,常规焦点遍历键是用于向前移动焦点的TAB键和用于向后移动焦点的SHIFT+TAB键。现在我想用ENTER键代替TAB键。有什么想法吗 Qinn我就是这样做的: rootNode.addEventFilter( KeyEvent.KEY_PRESSED, new EventHandler<KeyEvent>() { Robot eventRobot = new Robot(); @Override public void handle( KeyEvent K

常规焦点遍历键是用于向前移动焦点的TAB键和用于向后移动焦点的SHIFT+TAB键。现在我想用ENTER键代替TAB键。有什么想法吗


Qinn

我就是这样做的:

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;
            }
        }
    }
}
rootNode.addEventFilter(按下KeyEvent.KEY\u,新建EventHandler())
{
Robot eventRobot=新机器人();
@凌驾
公共无效句柄(KeyEvent KV)
{
开关(KV.getCode())
{
案例输入:
{
if(!(KV.getTarget()instanceof TextArea))
{
eventRobot.keyPress(java.awt.event.KeyEvent.VK_选项卡);
keyrease(java.awt.event.KeyEvent.VK_选项卡);
KV.消耗();
}
打破
}
案例选项卡:
{
if(!(KV.getTarget()instanceof TextArea))
{
KV.消耗();
}
打破
}
}
}
}

我认为最好使用两个类:
钥匙组合
用于更精确的钥匙检查以及
keyboard shortcutshandler
移动焦点

所以不需要使用机器人发送tab键

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();

    }
});

我可以根据Jurgen支持的代码使用键ENTER移动焦点。但是,键选项卡仍然可以同时移动焦点。有什么建议可以防止这种情况发生吗?我认为最好使用KeyCombination…ENTER=new KeyCodeCombination(KeyCode.ENTER,KeyCombination.CONTROL\u DOWN);请注意,KeyboardShortcutsHandler不是公共API!所以我认为这不是一个好主意。