2013-09-21 59 views
0

我有用VBView填充ImageViews和VBox放在CENP中的BorderPane中。 現在當移動ScrollBar我得到它的值,我想我的VBox重新定位Y軸的ScrollBar值。 我的代碼很簡單:如何在BorderPane中重新定位VBox?

@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也沒有搬遷的垂直框中,當我移動滾動條不動它。

謝謝!

回答

1

這聽起來像你正在試圖使一個vbox浮動滾動條。您可以嘗試將滾動條值屬性綁定到適當的vbox佈局維度,而不是使用偵聽器。例如。

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

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

但是,如果你只是放置垂直框在borderpane的中心,那麼這可能不是取決於你如何有放置在borderpane的垂直框工作。您可能需要將VBox包裝到AnchorPane中,以便您可以像這樣進行絕對定位。

我不是100%肯定這會工作,但你可能想試一試。祝你好運。

  • chooks