javafx - 关注容器中的下一个项目

标签 javafx javafx-8

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

最佳答案

没有公共(public)方法可以实现此目的。 只有黑客和解决方法。

您可以使用节点的

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

关于javafx - 关注容器中的下一个项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29984025/

相关文章:

java - TableCell:如何使用 StackedBarChart(或者不可能)?

JavaFX 中的 ListView 样式

java - 有没有办法将事件处理程序添加到我创建的非可视类中,而无需扩展可视类(如节点、父级、按钮等)

css - 背景透明不工作JavaFX

javafx - 从JavaFX输入字段中删除蓝框

javafx - 我在哪里可以找到 Java Prism 渲染可能的选项和文档?

javafx - 控制 JavaFX 虚拟键盘的尺寸

如果所有者窗口不可见,则 JavaFX 弹出窗口不会显示

JavaFX 8 - 如何在 HTMLEditor 上按下退格键?

javafx - JavaFX 中的 AutoScalePane 与 layoutChildren()