web-dev-qa-db-ja.com

JavaFX-TableViewの高さを行数に適合させる

TableViewの高さを、埋められた行の数に適合させて、空の行が表示されないようにします。つまり、TableViewの高さは、最後に入力された行を超えてはなりません。どうすればよいですか?

15
Just some guy

これを機能させるには、 fixedCellSize を設定する必要があります。

次に、TableViewの高さを、テーブルに含まれるアイテムのサイズに固定セルサイズを掛けたものにバインドできます。

デモ:

@Override
public void start(Stage primaryStage) {

    TableView<String> tableView = new TableView<>();
    TableColumn<String, String> col1 = new TableColumn<>();
    col1.setCellValueFactory(cb -> new SimpleStringProperty(cb.getValue()));
    tableView.getColumns().add(col1);
    IntStream.range(0, 20).mapToObj(Integer::toString).forEach(tableView.getItems()::add);

    tableView.setFixedCellSize(25);
    tableView.prefHeightProperty().bind(tableView.fixedCellSizeProperty().multiply(Bindings.size(tableView.getItems()).add(1.01)));
    tableView.minHeightProperty().bind(tableView.prefHeightProperty());
    tableView.maxHeightProperty().bind(tableView.prefHeightProperty());

    BorderPane root = new BorderPane(tableView);
    root.setPadding(new Insets(10));
    Scene scene = new Scene(root, 400, 400);
    primaryStage.setScene(scene);
    primaryStage.show();
}

注:fixedCellSize *(データサイズ+ 1.01)を乗算して、ヘッダー行を含めました。

16
eckig