如何在 BorderPane 中重新定位 VBox



我用 ImageView 填充了 VBox,VBox 放置在 CENTER.
的 BorderPane 中现在,当移动滚动条时,我得到了它的值,我希望我的 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();
    }

不幸的是,当我移动滚动条时,无论是 setLayoutY 还是 VBox 上的重新定位都不会移动它。

听起来您正在尝试制作一个随滚动条浮动的 vbox。 您可以尝试将滚动条值属性绑定到相应的 vbox 布局维度,而不是使用侦听器。 例如

ScrollBar bar = new ScrollBar();
VBox box = new VBox();
box.layoutYProperty().bind(bar.valueProperty());

但是,如果您只是将 VBox 放置在边框窗格的中心,则这可能不起作用,具体取决于您在边框窗格中放置 VBox 的方式。您可能需要将 VBox 包装在锚窗格中,以便可以像这样执行绝对定位。

我不是 100% 确定这会起作用,但您可能想尝试一下。 祝你好运。

  • 咔嚓咔��

相关内容

  • 没有找到相关文章

最新更新