我有一个tableview,它有一个可观察的自定义类对象列表(类类型:SalesInvoiceNetSale) . 表中的数据都很好 . 可观察列表中的最后一项是总计行(类类型:SalesInvoiceNetSaleTotal,它扩展了SalesInvoiceNetSale类) . 如果用户尝试按列对表进行排序,我只希望让我的表不对数组中的最后一条记录进行排序 . 我发现另一个帖子几乎都在问如何做同样的事情,但是我可以对Java 8的Lambda表达式有所了解 . TableView exclude bottom row (total) from sorting
public ObservableList<SalesInvoiceNetSale> applyTableTotalsToSalesInvoiceNetSaleList(ObservableList<SalesInvoiceNetSale> data, TableView table) {
// Adds A Total Row To The Table View & Disables The Sort Policy
double netValueTotal = 0;
double netDelivery = 0.0;
double netOversize = 0.0;
double netDeposit = 0.0;
for (SalesInvoiceNetSale i : data) {
netValueTotal += i.getNetValue();
netDelivery += i.getNetShipping();
netOversize += i.getNetOversize();
netDeposit += i.getNetDeposit();
}
SalesInvoiceNetSaleTotal rowTotal = new SalesInvoiceNetSaleTotal();
rowTotal.setNetValue(netValueTotal);
rowTotal.setNetShipping(netDelivery);
rowTotal.setNetDeposit(netDeposit);
rowTotal.setNetOversize(netOversize);
rowTotal.setLabel("Totals");
data.add(rowTotal);
table.sortPolicyProperty().set(t -> {
Comparator<Row> comparator = (r1, r2)
-> r1 == TOTAL ? 1 //TOTAL at the bottom
: r2 == TOTAL ? -1 //TOTAL at the bottom
: t.getComparator() == null ? 0 //no column sorted: don't change order
: t.getComparator().compare(r1, r2); //columns are sorted: sort accordingly
FXCollections.sort(table.getItems(), comparator);
return true;
});
return data;
}
我是JavaFX的新手,似乎无法通过排序策略的示例找到...
2 回答
对于你的情况,你可以尝试这样的事情:
如果你不明白这里发生了什么,快照 without lambda expression :
Working Example
如果您仍有疑问,请找一个工作示例,其方案与您的类似,我创建了一个类
ExtraPerson
,它扩展了Person
并将ExtraPerson
的新对象作为页脚这是用 Java8 和 lambda expressions 中的
TreeTableView
做同样事情的代码 .