我的fxml文件有以下声明:
< TableView fx:id =“myTable”prefHeight =“756.0”prefWidth =“472.0”/>
然后在Java代码中,我像往常一样添加列然后添加setItems。这可以按预期工作。
影响该表的唯一其他代码是:
myTable.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY);
可以很好地自动重新调整列的大小。但我无法弄清楚如何做到以下几点:
当我向表中添加1或10个项时,这些项在表的前1行或10行中显示为预期,但表中的行数始终为21.其余行是只是空的。如果我设置1项,我希望表只有1行,如果我设置10项,我希望表只有10行。我如何实现这一目标?
所有列的大小相同。我可以手动重新调整它们的大小,但我希望列根据其大小自动调整。例如,如果我有2列,其中一列是1-10的整数,另一列是文本描述,则它们都具有相同的大小。如何告诉它根据行内容自动调整列大小?
感谢您的回复!
答案 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;
}
});