2016-07-17 27 views
0

私はJavaFxには比較的新しいので、ノードが追加されるとVboxを増やすのに役立つ必要があります。JavaFxコンテンツがScrollPaneでサイズ変更されるようにサイズ変更

私はScrollPaneにVBoxを配置しました。 VBoxは、入ってくるとTitledPanesでいっぱいになります。しかし、TitledPaneがVboxに割り当てられたスペースを埋めると、TitledPanesは重なり始めます。理想的には、Vbox自体のサイズを変更し、ScrollPaneを使って移動することができます。

Vboxの最大高さをUSE_COMPUTED_SIZEに設定しました。私はスクロールペインにリスナーを追加して、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)を提供してください。通常、 'VBox'を' ScrollPane'の中に置くと、 'VBox'を追加すると' VBox'が大きくなり、 'ScrollPane'はスクロールバーを表示します。 – DVarga

答えて

0

あなたはVBoxではなくAccordionを使用している理由はありますか?あなたはTitledPane数の変化をチェックして、アイテムが追加または削除された場合Accordionのサイズを調整するためにListChangeListenerを使用することができ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を使っていたので、同時に複数のTitledPaneを開くことができます。 ScrollPaneがSplitPane内のAnchor Paneに追加されました。これはVBoxが成長することを可能にすることを示している。 ScrollPaneをSplitPaneに直接追加すると、そのトリックが実行されました。ありがとう。 –

関連する問題