有没有一种方法可以以编程方式关注容器中的下一个可聚焦节点,而无需直接调用特定组件的 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。