有没有一种方法可以以编程方式关注容器中的下一个可聚焦节点,而无需直接调用特定组件的 requestFocus() 方法?此功能类似于按下选项卡按钮以在跳过 disabled 节点的组件之间遍历焦点。

最佳答案

没有公开的方法。仅黑客和变通办法。

您可以使用节点的

impl_traverse(Direction.NEXT);

方法。但是不建议使用此命令,可以随时删除,并且可以使用新的Java版本中断代码。

或者,您可以按Enter键并触发Tab键事件。但这同样丑陋。

或者,如果您在文本字段中,则可以这样操作:
if( textfield.getSkin() instanceof BehaviorSkinBase) {
    ((BehaviorSkinBase) textfield.getSkin()).getBehavior().traverseNext();
}

但这也是令人沮丧的,因为它不是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 });
    }
}

您最终不得不提供一个Direction参数,但我们也不建议这样做。

您可以做的最好的事情就是comment and vote on this issue

09-12 17:15