在JavaFX 2中使用TableView时,似乎神奇地添加了一列而不是调整现有列的大小。请参阅以下屏幕截图。
我期望/想要的是:两列都有50%的空间,不应添加第三列(未命名/空)。
使用Scene Builder创建,FXML代码:
<?import java.lang.*?>
<?import java.util.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.paint.*?>
<BorderPane id="BorderPane" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns:fx="http://javafx.com/fxml">
<top>
<TableView prefHeight="200.0" prefWidth="200.0">
<columns>
<TableColumn prefWidth="75.0" text="Column X" />
<TableColumn prefWidth="75.0" text="Column X" />
</columns>
</TableView>
</top>
</BorderPane>
答案 0 :(得分:30)
使用
table.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY);
通过执行此操作,您可以确保表列标题中的额外空间将在列之间分配。在此分布中,当然会考虑列的最大和最小宽度
默认情况下,使用TableView.UNCONSTRAINED_RESIZE_POLICY
,其中tablecolumns最初将采用其首选宽度。
答案 1 :(得分:2)
Uluk Bly的回答绝对正确。
此外,使用Scenebuilder,确保将属性下拉窗口中的策略设置为相同(CONSTRAINED),它应该显示在FXML文件中,如下所示:
<columnResizePolicy>
<TableView fx:constant = "CONSTRAINED_RESIZE_POLICY"/>
</columnResizePolicy>
答案 2 :(得分:1)
这在javafx 2.2中对我有好处
table.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY);