我一直在尝试使用 JavaFX,并且希望对 Slider 的子结构执行一些操作,例如获取拇指的大小和位置、触发我自己的鼠标悬停事件等,而无需外推基于滑块本身的位置和值的信息。是否可以以编程方式访问这个子结构并收集一些关于它的基本信息?
问问题
1600 次
1 回答
2
Slider 是一个常规的 JavaFX 节点,因此您可以为它遍历渲染树。例如,可以通过 styleClass 来标识子节点。请参阅下一个示例,该示例打印 Slider 结构。从具有样式类“拇指”的节点中,您可以获得拇指的屏幕位置。
public class DoSlider extends Application {
@Override
public void start(Stage stage) {
Slider slider = SliderBuilder.create().min(0).max(100).value(50).showTickLabels(true).showTickMarks(true).build();
stage.setScene(new Scene(new Group(slider)));
stage.show();
traverse(slider);
}
public void traverse(Parent node) {
for (Node subNode : node.getChildrenUnmodifiable()) {
System.out.println(subNode.getClass().getSimpleName() + " " + subNode.getStyleClass());
if (subNode instanceof Parent) {
traverse((Parent)subNode);
}
}
}
public static void main(String[] args) {
launch(DoSlider.class, args);
}
输出将是下一个:
SliderSkin slider
NumberAxis axis
Label label axis-label
LabelSkin label axis-label
Text
Path axis-tick-mark
Path axis-minor-tick-mark
Text tick-mark
Text tick-mark
Text tick-mark
Text tick-mark
Text tick-mark
StackPane track
StackPane thumb
于 2011-11-18T17:29:44.637 回答