【发布时间】:2013-09-04 05:59:27
【问题描述】:
在 Java FX 中,我想在排序后的 TableView 中显示此模型:
public class ProfilZuordnungTableRowModel {
private int id;
private double kundenwert;
private String kundenwertFormatted;
private BooleanProperty selected; }
我想将表格列排序与“Kundenwert”列集成。 显示的值应该是属性“kundenwertFormatted”(字符串),并且应该使用属性“kundenwert”(双精度)进行排序。
所以我写了一个比较器:
class ProfilZuordnungTableRowModelComparator implements Comparator<ProfilZuordnungTableRowModel> {
@Override
public int compare(ProfilZuordnungTableRowModel t, ProfilZuordnungTableRowModel t1) {
return t.getKundenwert() < t1.getKundenwert() ? -1 : t.getKundenwert() == t1.getKundenwert() ? 0 : 1;
}
}
据我了解,该比较器应按以下方式使用:
TableColumn kundenwertColumn = new TableColumn();
kundenwertColumn.setText("Kundenwert");
kundenwertColumn.setCellValueFactory(new PropertyValueFactory("kundenwertFormatted"));
kundenwertColumn.setComparator(new ProfilZuordnungTableRowModelComparator());
但当尝试按“Kundenwert”列排序时,出现以下异常:
java.lang.ClassCastException: java.lang.String cannot be cast to model.ProfilZuordnungTableRowModel
at dialog.TableCellFactorySample$ProfilZuordnungTableRowModelComparator.compare(TableCellFactorySample.java:53)
指向这条线:
kundenwertColumn.setComparator(new ProfilZuordnungTableRowModelComparator());
有什么想法吗?
【问题讨论】:
-
你为什么要一个
kundenwert和一个kundenwertFormatted?我认为它们是多余的,格式化应该由 UI 完成,而不是模型。
标签: java sorting javafx comparator