JavaFX将特定顺序应用于TableView的可见列

时间:2018-06-04 15:10:40

标签: tableview javafx-8

我有一堆有一堆列的表,有些是可见的,但最隐形的。不可见的列都按字母顺序排序,使用忽略可见列的比较器,一切正常(是的!)。

但我希望按特定顺序显示可见列。 说我有可见的栏目'痛苦''获得''扭伤'' rain'而且'跛脚'默认情况下没有按照任何定义的方式进行排序或排序,我希望它们按照特定的顺序“获得'”' rain'' sprain',' ;跛'和痛苦'

我该如何实现?

1 个答案:

答案 0 :(得分:1)

您可以将订单放入地图中:

Map<String, Integer> columnOrder = new HashMap<>();
String[] order = new String[] {"gain", "rain", "sprain", "lame", "pain"};
for (int i = 0 ; i < order.length ; i++) {
    columnOrder.put(order[i], i);
}

然后只需使用Comparator API为排序提供比较器。在我看来,不可见列的顺序并不重要,因为你看不到它们,但是你可以做类似的事情

Comparator<TableColumn<?, ?>> columnComparator = 
    Comparator.comparing(TableColumn<?,?>::isVisible).
    .thenComparing(col -> columnOrder.getOrDefault(col.getText().toLowerCase(), Integer.MAX_VALUE));

默认为MAX_VALUE只是确保任何不在地图中的文字都在最后。