我需要向下滚动到Java FX中的某个标签组件。我怎么做 ?我有标签组件附加的ID。
<ScrollPane>
<VBox fx:id="menuItemsBox">
<Label text="....."/>
<Label text="....."/>
<Label text="....."/>
....
<Label text="....."/>
</VBox>
</ScrollPane>
答案 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())));
}
}