2016-07-17 36 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中有诀窍。谢谢。 –

相关问题