16

在 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>
4

2 回答 2

38

采用

table.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY);

通过这样做,您可以确保表列标题中的额外空间将分布在列之间。在这个分布中,列的最大和最小宽度当然被考虑在内。
默认情况下TableView.UNCONSTRAINED_RESIZE_POLICY,在表格列最初采用其首选宽度的情况下使用。

于 2012-10-18T08:16:43.263 回答
2

Uluk Bly 的答案对于代码是绝对正确的。

此外,使用 Scenebuilder 时,请确保将“属性”下拉窗口中的策略设置为相同(CONSTRAINED),并且它应该显示在您的 FXML 文件中,如下所示:

    <columnResizePolicy>
    <TableView fx:constant = "CONSTRAINED_RESIZE_POLICY"/>
    </columnResizePolicy>
于 2015-12-05T23:14:13.857 回答