Программный доступ к подструктуре слайдера

StackOverflow https://stackoverflow.com/questions/7838049

  •  27-10-2019
  •  | 
  •  

Вопрос

Я экспериментировал с Javafx и хотел выполнить некоторые операции на подструктуре слайдера, например, получить размер и положение большого пальца, выстрелить из моих собственных событий мыши и т. Д., Без необходимости экстраполировать это информация, основанная на позиции и значении самого ползунка. Можно ли программно получить доступ к этой субструктуре и получить некоторую основную информацию об этом?

Это было полезно?

Решение

Слайдер - это обычный узел Javafx, поэтому вы можете пройти дерево рендеринга для него. Субноды могут быть идентифицированы, например, с помощью StyleClass. Смотрите следующий пример, который печатает структуру слайдера. От узла с «большим пальцем» класса стиля вы можете получить экрановое положение большого пальца.

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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top