2011-10-20 63 views
1

我一直在嘗試使用JavaFX,並且我正在尋找對滑塊的子結構執行一些操作,例如獲取大小和位置的大拇指,觸發我自己的鼠標懸停事件,而不必根據滑塊本身的位置和價值推斷該信息。是否有可能以編程方式訪問此子結構並收集有關它的一些基本信息?以編程方式訪問Slider子結構

回答

2

Slider是一個普通的JavaFX節點,所以你可以遍歷它的渲染樹。例如,可以通過styleClass識別子節點。請參閱下一個打印Slider結構的示例。 從具有style-class「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 
+0

完美的作品,謝謝! – user713850