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

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();

}

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

以上是 JavaFX:如何更改焦点遍历策略? 的全部内容, 来源链接: utcz.com/qa/403284.html

回到顶部