2016-07-17 34 views
0

我對JavaFx相對來說比較新,我需要幫助讓Vbox隨着節點的添加而增長。JavaFx隨着內容與ScrollPane的添加,調整VBox

我在一個ScrollPane中放置了一個VBox。 VBox在進入時用TitledPanes填充。但是一旦TitledPanes填充分配給Vbox的空間,TitledPanes開始重疊。理想情況下,我想讓Vbox自行調整大小並使用ScrollPane進行導航。

我將Vbox Max Height設置爲USE_COMPUTED_SIZE。我在ScrollPane中添加了一個監聽器來監聽VBox的大小變化,但沒有運氣。有什麼建議麼?

scrollPane.vvalueProperty().addListener(new ChangeListener<Number>() { 
    public void changed(ObservableValue<? extends Number> ov, 
      Number old_val, Number new_val) { 
     vBox.setLayoutY(-new_val.doubleValue()); 
    } 
}); 
+1

請提供[MCVE(http://stackoverflow.com/help/mcve)使我們能夠重現。通常情況下(如果你沒有使用任何約束),如果你在'ScrollPane'中放置了一個VBox,隨着越來越多的孩子被添加並且ScrollPane顯示它的滾動條,VBox開始增長。 – DVarga

回答

0

是否有您使用的是VBox而不是Accordion任何理由? 隨着Accordion你可以使用一個ListChangeListener以檢查TitledPane數量的變化,然後,如果添加或刪除的項目調整Accordion的大小:

accordion.getPanes().addListener(new ListChangeListener<Item>() { 
    public void onChanged(Change<tem> c) { 
     while (c.next()) { 
      if(c.wasAdded() || c.wasRemoved){ 
       //resize Accordion in dependency of the vvalue of your scrollpane 
      } 
     } 
    }); 

對於VBox,原則仍然應該是有效的:

vbox.getChildren().addListener(new ListChangeListener<Item>() { 
    public void onChanged(Change<tem> c) { 
     while (c.next()) { 
      if(c.wasAdded() || c.wasRemoved){ 
       //rezise VBox in dependency of the vvalue of your scrollpane 
      } 
     } 
    }); 

based on

+0

感謝您的答覆。我使用的是VBox,因爲它允許我同時打開多個TitledPanes。 ScrollPane被添加到SplitPane中的錨窗格中。原來,這確實可以讓VBox增長。將ScrollPane直接添加到我的SplitPane中有訣竅。謝謝。 –

相關問題