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

JavaFX apply specific order to visible columns of TableView

我有一个 table 有一堆列,有些是可见的,但大部分是不可见的。不可见的列全部按字母顺序排序,使用忽略可见列的比较器,一切正常(耶!)。

但我希望按特定顺序排列可见列。 假设我有可见列 'pain'、'gain'、'sprain'、'rain' 和 'lame',它们默认情况下不以任何定义的方式排序或排序,我想要它们按特定顺序 'gain'、'rain'、'sprain'、'lame' 和 'pain'

我怎样才能做到这一点?

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

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 只是确保任何包含地图中没有的文本的列都在末尾。