在我的JavaFX应用程序中,我在TabPane中有一个TitledPaneTabPane内是一个VBox,其中包括一个按钮,该按钮可增加该VBox中的元素数量(并因此增加VBox的高度)。

但是,当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"));
}


(当然,为了简洁起见,我省略了适当的导入)

最佳答案

要进行重绘,您需要将TabPane标记为“脏”,这需要重新计算UI中的大小。

这是通过在requestLayout()上调用方法TabPane来完成的。

请参阅TabPane及其超类Parent的文档



为了使该示例起作用,请将fx:id="tabPane"添加到<TabPane> fxml节点,然后将字段@FXML TabPane tabPane;添加到控制器,并将行tabPane.requestLayout()添加到#addElement

关于java - JavaFX VGrow TabPane上的内容更改,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34805202/

10-10 14:02