如何滚动到Java FX中的某个组件?

时间:2015-03-29 14:37:11

标签: javafx javafx-2

我需要向下滚动到Java FX中的某个标签组件。我怎么做 ?我有标签组件附加的ID。

<ScrollPane>
    <VBox fx:id="menuItemsBox">
        <Label text="....."/>
        <Label text="....."/>
        <Label text="....."/>
        ....
        <Label text="....."/>
   </VBox>
</ScrollPane>

1 个答案:

答案 0 :(得分:1)

您可以将scrollPane的vValue设置为节点的LayoutY值。由于setVvlaue()接受0.0 to 1.0之间的值,因此您需要根据它来计算输入范围。

scrollPane.setVvalue(/*Some Computation*/);

必须在舞台的isShowing()true之后设置。

完成示例

public class Main extends Application {
    @Override
    public void start(Stage primaryStage) throws Exception {
        ScrollPane pane = new ScrollPane();
        VBox box = new VBox();
        IntStream.range(1, 10).mapToObj(i -> new Label("Label" + i)).forEach(box.getChildren()::add);
        pane.setContent(box);
        Scene scene = new Scene(pane, 200, 50);
        primaryStage.setScene(scene);
        primaryStage.show();

        // Logic to scroll to the nth child
        Bounds bounds = pane.getViewportBounds();
        // get(3) is the index to `label4`.
        // You can change it to any label you want
        pane.setVvalue(box.getChildren().get(3).getLayoutY() * 
                             (1/(box.getHeight()-bounds.getHeight())));
    }
}