当前位置: 首页 > 面试题库 >

JavaFX:如何更改焦点遍历策略?

皇甫礼骞
2023-03-14
问题内容

JavaFX是否可以像AWT一样更改 焦点遍历策略

因为我的两个HBoxES 的遍历顺序是错误的。


问题答案:

在通常情况下,导航以容器顺序,子顺序或按箭头键进行。您可以更改节点的顺序-在这种情况下,这将是您的最佳解决方案。

JFX中有一个关于遍历引擎策略替换的后门:

您可以继承内部类com.sun.javafx.scene.traversal.TraversalEngine

engine = new TraversalEngine(this, false) {
            @Override public void trav(Node owner, Direction dir) {
                // do whatever you want
            }
        };

并使用

setImpl_traversalEngine(engine);

调用以应用该引擎。

您可以观察OpenJFX的代码,以了解其工作方式以及可以做什么。

请注意:它是一个内部API,并且可能会在不久的将来更改。因此,请勿依赖于此(无论如何,您都不能依赖此形式)。

示例实现:

public void start(Stage stage) throws Exception {
    final VBox vb = new VBox();

    final Button button1 = new Button("Button 1");
    final Button button2 = new Button("Button 2");
    final Button button3 = new Button("Button 3");

    TraversalEngine engine = new TraversalEngine(vb, false) {
        @Override
        public void trav(Node node, Direction drctn) {
            int index = vb.getChildren().indexOf(node);

            switch (drctn) {
                case DOWN:
                case RIGHT:
                case NEXT:
                    index++;
                    break;
                case LEFT:
                case PREVIOUS:
                case UP:
                    index--;
            }

            if (index < 0) {
                index = vb.getChildren().size() - 1;
            }
            index %= vb.getChildren().size();

            System.out.println("Select <" + index + ">");

            vb.getChildren().get(index).requestFocus();
        }
    };

    vb.setImpl_traversalEngine(engine);

    vb.getChildren().addAll(button1, button2, button3);
    Scene scene = new Scene(vb);
    stage.setScene(scene);
    stage.show();
}

对于普通情况,将需要强大的分析技能;)



 类似资料:
  • 我有一个JTabbed面板,它有4个选项卡。每个选项卡都有一个 JTable。我正在尝试为JTabbedPane设计一个自定义的焦点移动策略,这样当我专注于表格的最后一个单元格时,按Tab会将我带到下一个标签。我已经搜索了很多,但没有找到我可以使用的特定内容。 以下是我的自定义焦点遍历策略。 此外,这些JTables正在其他地方实例化,我已经覆盖了Tab键绑定,以便在最后一个单元格上专注于下一个组

  • 我创建了一个Jframe,它由Jbutton(Ok)、Jbutton(cancel)、Jtextfield和一个Jtable组成。我想当按下OK按钮时,焦点变为Jtextfield,当按下增益按钮时,焦点变为JTable。 如何在组件之间更改焦点? 这就是我尝试过的: 它只关注JTextfield,但不会将焦点更改为JTable 编辑:我也试过: 但没有奏效 这是整个代码:

  • 问题内容: 聚焦输入字段时如何更改占位符的颜色?我使用此CSS设置默认颜色,但是如何更改焦点? 问题答案: 试试这个,这应该工作:

  • 我意识到我目前关注的标签很难区分: 所以我的问题是如何改变当前焦点选项卡的颜色(前景或背景都会有帮助)?我在设置中搜索,但找不到。 我的平台是Android Studio版本2.1,LinuxFedora 21,gnome 3.14.0。

  • 我正在一个活动的登录页面上工作,其中用户名和密码作为两个编辑文本框。当焦点从用户名更改为密码框时,我试图显示Toast消息:-如果在用户名框中输入的文本中有空格-如果没有空格,则不显示Toast。

  • 问题内容: 我有一个Map如下所示的bean: 这ftqSet适合以下数据结构: 在我的测试JSP文件中,我一直在尝试使用来访问数据 : 但是它没有输出${f.feedId}。为什么会这样呢?我将如何访问该结构的各个元素,以便创建一个漂亮的表? 问题答案: 的每次迭代中给出了一个实例,它反过来又和getValue()方法。这与在普通Java中进行操作类似。 例如 在的情况下, 的回报, ,所以你需