我正在用数据库中的一些数据创建一个tableview。为了使数据更加翔实,我想在其上添加一个后缀,例如,在price(作为整数)之后添加“,-”等。
现在,字符串连接可以很好地添加这个后缀(我的列采用泛型数据类型),但是tableview中的内置排序机制将开始将列排序为字符串,而不是整数(或其他数据类型)。
那么,是否有一种方法可以将后缀添加到表列的整数值(或任何数据类型),同时保持排序机制不变呢?
我来这里之前在网上搜索了一下,可惜没有任何运气。
通常,您使用为列实现carable
(就像integer
那样)的值类型,并使用cellFactory
修改值的显示方式:
public static class Item {
private BigDecimal price;
public BigDecimal getPrice() {
return price;
}
public Item(BigDecimal price) {
this.price = price;
}
}
@Override
public void start(Stage primaryStage) {
TableView<Item> table = new TableView<>();
TableColumn<Item, BigDecimal> column = new TableColumn<>();
column.setCellValueFactory(new PropertyValueFactory<>("price"));
column.setCellFactory(new Callback<TableColumn<Item, BigDecimal>, TableCell<Item, BigDecimal>>() {
private final Font font = Font.font("monospaced");
private final BigDecimal hundred = BigDecimal.valueOf(100);
private final char decimalSeparator = DecimalFormatSymbols.getInstance().getDecimalSeparator();
@Override
public TableCell<Item, BigDecimal> call(TableColumn<Item, BigDecimal> param) {
return new TableCell<Item, BigDecimal>() {
{
setAlignment(Pos.BASELINE_RIGHT);
setFont(font);
}
@Override
protected void updateItem(BigDecimal item, boolean empty) {
super.updateItem(item, empty);
if (empty || item == null) {
setText("");
} else {
BigInteger num = item.toBigInteger();
int frac = item.movePointRight(2).abs().remainder(hundred).intValue();
String numPart = String.format("%,d", num) + decimalSeparator;
setText(numPart + (frac == 0 ? "- " : String.format("%02d", frac)));
}
}
};
}
});
table.getColumns().add(column);
table.getItems().addAll(
new Item(new BigDecimal("2")),
new Item(new BigDecimal("2.5")),
new Item(new BigDecimal("5555.99")),
new Item(new BigDecimal("123456789.77")),
new Item(new BigDecimal("22011.05")),
new Item(new BigDecimal("4211"))
);
Scene scene = new Scene(table);
primaryStage.setScene(scene);
primaryStage.show();
}
(您还可以使用自定义的比较器
作为TableColumn
的comparator
属性的值,以指定如何对值进行排序;如果需要,可以将-
视为0
并忽略任何组分隔器。)
我的TableView没有更新,我需要一个监听器吗?(m是我的模型) 在一个新的阶段,我在我的模型列表中添加了一些Mitarbeiter 但是另一个阶段的TableView没有更新新数据。最后,观察列表不是指向模型中的ArrayList吗?
现在有几个关于“如何将数据从数据库添加到TableView”的答案,我只将其中一个链接起来,因为它们几乎都是重复的。 我感觉使用使数据库变得毫无用处,因为最后,我再次在中获得了所有内容。 有没有什么方法可以在不使用s的情况下填充表,就像上面的答案所描述的那样?
我对JavaFX还很陌生。我已经无望地试图让它工作了这么长时间,但不知道为什么它不起作用。项不显示在TableView上。我使用scene Builder创建了UI。我看过很多类似的问题,似乎没有什么帮助。 简化为最小代码: 主: 控制器: Person类: FXML: 多谢了。
我在javaFX开发应用程序。我想在桌面上显示json的反应。我不知道怎么做 我的档案如下: 项目。fxml 项目控制器 我在中得到json响应,我想在表视图中显示它。 我不知道如何将json绑定到表视图。 我可以将json转换为数组。 但是,tableview的方法要求使用观测列表。 因此,任何建议和例子都将受到高度重视。
我有一个表视图,它有一个附加到它的自定义类对象的可观察列表(类类型:SalesInvoiceNetSale)。数据都在表中显示良好。可观察列表中的最后一项是总计行(类类型:SalesInvoiceNetSaleTotal,它扩展了SalesInvoiceNetSale类)。我只是希望如果用户尝试按列对表进行排序,我的表不会对数组中的最后一条记录进行排序。我发现了另一个帖子,几乎是在问如何做同样的事
有人能告诉我一种为javafx tableview实现确保可见例程的方法吗?我花了几个小时研究,但什么也没找到。谢谢