JavaFX:如何更改焦点遍历策略?
JavaFX是否可以像AWT一样更改 焦点遍历策略 ?
因为我的两个HBox
ES 的遍历顺序是错误的。
回答:
在通常情况下,导航以容器顺序,子顺序或按箭头键进行。您可以更改节点的顺序-在这种情况下,这将是您的最佳解决方案。
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();
}
对于普通情况,将需要强大的分析技能;)
以上是 JavaFX:如何更改焦点遍历策略? 的全部内容, 来源链接: utcz.com/qa/403284.html