Javafx TableView格式化

时间:2013-12-30 23:06:25

标签: javafx-2 tableview fxml

我的fxml文件有以下声明:

  

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

然后在Java代码中,我像往常一样添加列然后添加setItems。这可以按预期工作。

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

  

myTable.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY);

可以很好地自动重新调整列的大小。但我无法弄清楚如何做到以下几点:

  1. 当我向表中添加1或10个项时,这些项在表的前1行或10行中显示为预期,但表中的行数始终为21.其余行是只是空的。如果我设置1项,我希望表只有1行,如果我设置10项,我希望表只有10行。我如何实现这一目标?

  2. 所有列的大小相同。我可以手动重新调整它们的大小,但我希望列根据其大小自动调整。例如,如果我有2列,其中一列是1-10的整数,另一列是文本描述,则它们都具有相同的大小。如何告诉它根据行内容自动调整列大小?

  3. 感谢您的回复!

1 个答案:

答案 0 :(得分: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;
        }
    });