专注于容器中的下一个项目

Dav*_*Yee 5 javafx javafx-8

有没有办法以编程方式关注容器中的下一个可聚焦节点而不直接调用特定组件的requestFocus()方法?此功能类似于按Tab键按钮在disabled跳过节点的组件之间遍历焦点.

Rol*_*and 8

没有公开的方法.只有黑客和解决方法.

你可以使用节点

impl_traverse(Direction.NEXT);
Run Code Online (Sandbox Code Playgroud)

方法.但是这个被弃用了,可以随时删除,你的代码会破坏新的java版本.

或者,您可以捕获回车键并触发Tab键事件.但那同样难看.

或者如果你在文本字段中,你可以这样做:

if( textfield.getSkin() instanceof BehaviorSkinBase) {
    ((BehaviorSkinBase) textfield.getSkin()).getBehavior().traverseNext();  
}
Run Code Online (Sandbox Code Playgroud)

但这也是因为它不是api而气馁.

即使您使用反射来访问场景的遍历方法,如下所示:

Method[] allMethods = scene.getClass().getDeclaredMethods();
for (Method m : allMethods) {
    String mname = m.getName();
    if (mname.startsWith("traverse")) {
        m.setAccessible(true);
        m.invoke(scene, new Object[] { textfield, Direction.NEXT });
    }
}
Run Code Online (Sandbox Code Playgroud)

你最终必须提供一个方向参数,这也是不鼓励的.

您可以做的最好的事情是对此问题进行评论和投票.