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

How do I scroll to a certain component in Java FX?

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

<ScrollPane>
    <VBox fx:id="menuItemsBox">
        <Label text="....."/>
        <Label text="....."/>
        <Label text="....."/>
        ....
        <Label text="....."/>
   </VBox>
</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())));
    }
}