将页脚行放入JTable的最佳方法是什么?有没有人有任何示例代码来执行此操作?
到目前为止,我唯一想到的方法是在表模型中放一个特殊的行,它总是被排序到底部.
这是我最终得到的:
JTable mainTable = new JTable(mainTableModel);
JTable footerTable = new JTable(footerModel);
footerTable.setColumnModel(mainTable.getColumnModel());
// Disable selection in the footer. Otherwise you can select the footer row
// along with a row in the table and that can look quite strange.
footerTable.setRowSelectionAllowed(false);
footerTable.setColumnSelectionAllowed(false);
JPanel tablePanel = new JPanel();
BoxLayout boxLayout = new BoxLayout(tablePanel, BoxLayout.Y_AXIS);
tablePanel.setLayout(boxLayout);
tablePanel.add(mainTable.getTableHeader()); // This seems like a bit of a WTF
tablePanel.add(mainTable);
tablePanel.add(footerTable);
Run Code Online (Sandbox Code Playgroud)
排序工作正常,但选择页脚行有点奇怪.
我有一个tableview,它有一个可观察的自定义类对象列表(类类型:SalesInvoiceNetSale).表中的数据都很好.可观察列表中的最后一项是总计行(类类型:SalesInvoiceNetSaleTotal,它扩展了SalesInvoiceNetSale类).如果用户尝试按列对表进行排序,我只希望让我的表不对数组中的最后一条记录进行排序.我发现另一个帖子几乎都在询问如何做同样的事情,但似乎无法解决这个问题,我怀疑这是我对Java 8的Lambda表达式的不了解.TableView从排序中排除底行(总计)
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 …Run Code Online (Sandbox Code Playgroud)