Java 如何在BorderPane中重新定位VBox?

Java 如何在BorderPane中重新定位VBox?,java,javafx-2,vbox,Java,Javafx 2,Vbox,我用ImageView填充了VBox,VBox位于中间的边框窗格中。 现在,当移动滚动条时,我得到了它的值,我希望我的VBox被Y轴重新定位为滚动条的值。 我的代码很简单: @Override public void start(Stage stage) throws Exception { stage.setTitle("MyScrollbarSample"); ScrollBar scrollBar = new ScrollBar();

我用ImageView填充了VBox,VBox位于中间的边框窗格中。 现在,当移动滚动条时,我得到了它的值,我希望我的VBox被Y轴重新定位为滚动条的值。 我的代码很简单:

@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();
    }
@覆盖
public void start(Stage)引发异常{
stage.setTitle(“MyScrollbarSample”);
ScrollBar ScrollBar=新的ScrollBar();
滚动条.增量(10);
滚动条设置最大值(180);
滚动条。设置方向(方向。垂直);
//滚动条。设置预高度(180);
滚动条设置值(90);
最终VBox VBox=新VBox(1);
//vBox.setPrefHeight(180);
对于(int i=1;i<6;i++){
vBox.getChildren().add(新图像(新图像(getClass().getResourceAsStream(“fw”+i+“.jpg”))));
}
scrollBar.valueProperty().addListener(新的ChangeListener()){
@凌驾

public void changed(ObservalEvalue听起来您正试图创建一个随滚动条浮动的vbox。您可以尝试将scrollbar value属性绑定到相应的vbox布局维度,而不是使用侦听器

ScrollBar bar = new ScrollBar();
VBox box = new VBox();

box.layoutYProperty().bind(bar.valueProperty());
但是,如果您只是将VBox放置在borderpane的中心,则这可能不起作用,具体取决于您在borderpane中放置VBox的方式。您可能需要将VBox包裹在锚具中,以便可以像这样进行绝对定位

我不是100%肯定这会奏效,但你可能想试试。祝你好运