JavaFX TableView 格式化

3

我的fxml文件有如下声明:

< TableView fx:id="myTable" prefHeight="756.0" prefWidth="472.0" />

然后在Java代码中,我像平常一样添加列,然后设置items。这按预期工作。

唯一影响表的其他代码是:

myTable.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY);

它很好地自动重新调整大小了列宽。但我不知道如何做到以下几点:

  1. 当我向表格添加1个或10个项目时,这些项目将按预期出现在表格的前1个或10个行中,但表格中的行数始终为21。其余的行都是空的。如果我只设置了1个项目,则希望表格只有1行;如果我设置了10个项目,则希望表格有10行。我该如何实现?

  2. 所有列的大小都相同。我可以手动调整它们的大小,但我想让列根据它们的大小自适应大小。例如,如果我有2列,一列包含1-10的整数,另一列包含文本描述,它们都具有相等的大小。我该如何告诉它根据行内容自动调整列宽?

感谢您的回复!

1个回答

2
填充布局会有空行。试着通过添加CSS隐藏它们。
.table-row-cell:empty {
    -fx-background-color: -fx-background;
}
.table-row-cell:empty .table-cell {
    -fx-border-width: 0px;
}

对于问题#2,您可以通过单元格值工厂检查单元格中文本的长度,但我存在标题类似的问题。您可以读取数据集并确定应该是什么。这两种方法都是根据字体大小的近似值。

在我的play cellValueFactory中添加了这个,我尝试了一些东西。

    TableColumn<LineItem,String> amountCol = new TableColumn<>("Amount");
    amountCol.setPrefWidth(amountCol.getText().length()*20);
    amountCol.setCellValueFactory(new Callback<CellDataFeatures<LineItem, String>, ObservableValue<String>>() {
        @Override
        public ObservableValue<String> call(CellDataFeatures<LineItem, String> p) {
            SimpleStringProperty ssp = new SimpleStringProperty(String.format("%.4f", p.getValue().getAmount()));
            amountCol.setPrefWidth(Math.max(amountCol.getPrefWidth(), ssp.get().length()*20));
            return ssp;
        }
    });

关于 CSS,它只改变了格式并省略了空白区域,有没有一种在代码中更改设置以便根本不显示额外行的方法? - na_ka_na
@na_ka_na 我认为这是唯一的方法。我在代码中找不到任何方法,只在谷歌上找到了这种方法。 - brian

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接