在通常情况下,导航以容器顺序,子顺序或按箭头键进行。您可以更改节点的顺序-在这种情况下,这将是您的最佳解决方案。
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();}对于普通情况,将需要强大的分析技能;)



