如何滚动到 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())));
}
}
我需要向下滚动到 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())));
}
}