JavaFX8.0:如何更改焦点遍历键?
常规焦点遍历键是用于向前移动焦点的TAB键和用于向后移动焦点的SHIFT+TAB键。现在我想用ENTER键代替TAB键。有什么想法吗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
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!所以我认为这不是一个好主意。