2016-01-15 110 views
0

在我的JavaFX應用程序中,我有一個TabPaneTitledPane。在TabPane內的是VBox,其包括增加該VBox(以及VBox的高度)中的元素的數量的按鈕。JavaFX VGrow TabPane內容變化

但是,當VBox增長時,我似乎無法讓Tab/TabPane調整大小。 (刪除TabPane並將VBox放入TitledPane可直接導致正確的實時大小調整。)但是,更改選項卡使TabPane認識到它太小並且調整大小。

下面是一個小例子FXML,可以重現這一點。單擊第一個選項卡中的任意次數的按鈕,然後切換選項卡。然後TabPane將調整大小以適應新的內容量。

如何使TabPane調整按鈕動作?


FXML:

<AnchorPane xmlns="http://javafx.com/javafx/8.0.40" xmlns:fx="http://javafx.com/fxml/1" fx:controller="FXMLController" prefHeight="400" prefWidth="700"> 
    <children> 
     <TitledPane> 
      <TabPane> 
       <tabs> 
        <Tab> 
         <VBox fx:id="vBox"> 
          <children> 
           <Button onAction="#addElement" /> 
          </children> 
         </VBox> 
        </Tab> 
        <Tab /> 
       </tabs> 
      </TabPane> 
     </TitledPane> 
    </children> 
</AnchorPane> 

控制器:

@FXML VBox vBox; 

@FXML void addElement() { 
    vBox.getChildren().add(new Label("Hello World")); 
} 

回答

1

(當然適當進口,我已經離開了爲簡潔起見),以獲得重繪發生,您需要將TabPane標記爲「髒」 - 它需要重新計算UI中的大小。

這是通過調用TabPane上的方法requestLayout()完成的。

參見TabPane的文檔和它的超類Parent


爲了使這個實施例的行爲,添加fx:id="tabPane"<TabPane> FXML節點,則該字段@FXML TabPane tabPane;添加到所述控制器和所述線tabPane.requestLayout()#addElement

+0

請參閱https://bugs.openjdk.java.net/browse/JDK-8145495 – CAD97