TableView имеет больше столбцов, чем указано

При использовании TableView в JavaFX 2, кажется, волшебным образом добавляется одна колонка вместо изменения существующих. См. Следующий снимок экрана.

То, что я ожидал бы/хочу: обе колонки должны иметь 50% пространства, не должен быть добавлен третий (неназванный/пустой) столбец.

enter image description here

Созданный с помощью 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>

Ответ 1

Использование

table.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY);

Выполняя это, вы гарантируете, что дополнительное пространство в заголовке столбца таблицы будет распределено между столбцами. В этом распределении, конечно, учитываются максимальная и минимальная ширины столбцов.
По умолчанию используется TableView.UNCONSTRAINED_RESIZE_POLICY, в котором столбцы таблицы сначала будут использовать предпочтительную ширину.

Ответ 2

Ответ Улука Блай абсолютно правильный для кода.

Кроме того, используя Scenebuilder, убедитесь, что политика в раскрывающемся окне "Свойства" идентична (CONSTRAINED), и она должна отображаться в вашем файле FXML следующим образом:

    <columnResizePolicy>
    <TableView fx:constant = "CONSTRAINED_RESIZE_POLICY"/>
    </columnResizePolicy>

Ответ 3

Это было хорошо для меня в javafx 2.2

table.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY);