java - 如何在 BorderPane 中重新定位 VBox?

标签 java javafx javafx-2 vbox

我有一个充满 ImageView 的 VBox,并且 VBox 放置在中心的 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 上的重新定位都不会移动它。

最佳答案

听起来您正在尝试制作一个随滚动条 float 的 vbox。您可以尝试将滚动条值属性绑定(bind)到适当的 vbox 布局尺寸,而不是使用监听器。例如

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

box.layoutYProperty().bind(bar.valueProperty());

但是,如果您只是将 VBox 放置在边框 Pane 的中心,那么这可能不起作用,具体取决于您如何将 VBox 放置在边框 Pane 中。您可能需要将 VBox 包装在 AnchorPane 中,以便可以像这样进行绝对定位。

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

关于java - 如何在 BorderPane 中重新定位 VBox?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18930159/

相关文章:

Java 控制台输出 - 文件和控制台两者

java - 二维数组的 Sigmoid 函数

JavaFX - 多个网格 Pane - 只有一个正在连接,其余为空

java - JAVA FX 2.0 如何去除TableView 中的空行

当我运行另一个线程时,JavaFx 进度指示器卡住

JavaFX - 为什么将节点多次添加到一个 Pane 或添加到不同的 Pane 会导致错误?

java - 离开和返回 Activity 后使用计时器 onTick 更新 TextView

java - struts2中同一个 Action 的两个方法?

java - 如何在 Javafx 8 中为标签文本添加上标

java - 在 JavaFX 中对 MouseEvent 和 KeyEvent 使用相同的 EventHandler?