关于内容更改的JavaFX VGrow TabPane

时间:2016-01-15 06:02:57

标签: java javafx java-8 javafx-8

在我的JavaFX应用程序中,TabPane中有一个TitledPaneTabPane中的VBoxVBox,其中包含一个按钮,用于增加VBox中元素的数量(以及Tab的高度)。

但是,当VBox增长时,我似乎无法让TabPane / TabPane调整大小。 (删除VBox并将TitledPane直接放入TabPane会导致正确的动态调整大小。)但是,更改标签会使TabPane意识到它太小了,调整大小。

下面是一个可以重现这一点的小例子FXML。单击第一个选项卡中的按钮任意次,然后切换选项卡。然后,TabPane将调整大小以适应新的内容量。

如何在按钮操作上调整<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:

@FXML VBox vBox;

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

控制器:

var myclass = {
    mymethod: function( console.log('ok'); }
};

var mym = sinon.stub(myclass, 'mymethod');
console.log(mym.toString());
console.log(myclass.mymethod.toString());

(当然,我为了简洁起见而遗漏了适当的进口商品)

1 个答案:

答案 0 :(得分:1)

要重新绘制,您需要将TabPane标记为&#34;脏&#34; - 它需要在UI中重新计算大小。

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

请参阅TabPane及其超类Parent

的文档

要使此示例有效,请将fx:id="tabPane"添加到<TabPane> fxml节点,然后将字段@FXML TabPane tabPane;添加到控制器,将行tabPane.requestLayout()添加到#addElement }。