Javafx 以编程方式访问滑块子结构

Javafx 以编程方式访问滑块子结构,javafx,javafx-2,Javafx,Javafx 2,我一直在使用JavaFX进行实验,我希望在滑块的子结构上执行一些操作,例如获取拇指的大小和位置,在事件上启动我自己的鼠标等,而不必根据滑块本身的位置和值推断信息。是否可以通过编程方式访问此子结构并收集有关它的一些基本信息?Slider是一个常规的JavaFX节点,因此您可以为它遍历渲染树。子节点可以被识别,例如,通过styleClass。请参见下一个示例,该示例打印滑块结构。 从带有样式类“thumb”的节点,可以获得thumb的屏幕位置 public class DoSlider extend

我一直在使用JavaFX进行实验,我希望在滑块的子结构上执行一些操作,例如获取拇指的大小和位置,在事件上启动我自己的鼠标等,而不必根据滑块本身的位置和值推断信息。是否可以通过编程方式访问此子结构并收集有关它的一些基本信息?

Slider是一个常规的JavaFX节点,因此您可以为它遍历渲染树。子节点可以被识别,例如,通过styleClass。请参见下一个示例,该示例打印滑块结构。 从带有样式类“thumb”的节点,可以获得thumb的屏幕位置

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