簡體   English   中英

如何在BorderPane中重新放置VBox?

[英]How to relocate VBox inside BorderPane?

我有裝滿ImageViews的VBox,並且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上的重定位都不會移動它。

謝謝!

聽起來您正在嘗試制作一個隨滾動條浮動的vbox。 您可以嘗試將scrollbar value屬性綁定到適當的vbox布局維度,而不是使用偵聽器。 例如

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

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

但是,如果您只是將VBox放置在邊框的中央,則可能無法工作,具體取決於您如何將VBox放置在邊框中。 您可能需要將VBox包裝在AnchorPane中,以便可以像這樣進行絕對定位。

我不是100%肯定會成功,但是您可以嘗試一下。 祝好運。

  • chooks

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM