我让VBox充满了ImageViews,VBox被放置在CENTER的BorderPane中。 现在,当移动ScrollBar时,我得到它的值,我希望我的VBox被Y轴重新定位,与ScrollBar值一样多。 我的代码很简单:
@Override
public void start(Stage stage) throws Exception {
stage.setTitle("MyScrollbarSample");
ScrollBar scrollBar = new ScrollBar();
scrollBar.setBlockIncrement(10);
scrollBar.setMax(180);
scrollBar.setOrientation(Orientation.VERTICAL);
// scrollBar.setPrefHeight(180);
scrollBar.setValue(90);
final VBox vBox = new VBox(1);
// vBox.setPrefHeight(180);
for (int i = 1; i < 6; i++) {
vBox.getChildren().add(new ImageView(new Image(getClass().getResourceAsStream("fw" + i + ".jpg"))));
}
scrollBar.valueProperty().addListener(new ChangeListener<Number>() {
@Override
public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) {
System.out.println("newValue=" + newValue.doubleValue());
// vBox.setLayoutY(-newValue.doubleValue());
vBox.relocate(vBox.getLayoutX(), - newValue.doubleValue());
}
});
BorderPane borderPane = new BorderPane();
borderPane.setCenter(vBox);
borderPane.setRight(scrollBar);
stage.setScene(new Scene(borderPane));
stage.show();
}
不幸的是,当我移动ScrollBar时,setLayoutY和重定位VBox都不会移动它。
谢谢!
答案 0 :(得分:1)
听起来你正试图制作一个随滚动条浮动的vbox。您可以尝试将滚动条值属性绑定到相应的vbox布局维度,而不是使用侦听器。 E.g。
ScrollBar bar = new ScrollBar();
VBox box = new VBox();
box.layoutYProperty().bind(bar.valueProperty());
但是,如果您只是将VBox放置在borderpane的中心,那么这可能不起作用,具体取决于您将VBox放置在borderpane中的方式。您可能需要将VBox包装在AnchorPane中,以便您可以像这样进行绝对定位。
我不是百分百肯定这会起作用,但你可能想尝试一下。祝你好运。