使用構建是否有人知道,以顯示在JTable的頭的圖標排序的好方法,在不排序功能的使用構建?顯示JTable中頭圖標排序沒有排序機制
的排序是由表模型(實際上是一個數據庫),而不是根據JTable本身來完成。這就是爲什麼圖標的自動顯示不起作用。也許一個可以插入一個虛擬RowSorter的,什麼也不做,反而使得分類圖標出現在哪裏?
我發現了一個更好的解決方案
我只是寫我自己的RowSorter的,這樣排序不會有什麼影響,但排序請求重定向模型代替。這樣的排序順序是由外觀顯示和感覺本身。一些僞:
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import javax.swing.RowSorter;
import xyz.SortableTableModel;
public class MyRowSorter<M extends SortableTableModel> extends RowSorter<M> {
private M tableModel;
private List<? extends SortKey> sortKeys = new LinkedList<>();
public MyRowSorter(M tableModel) {
this.tableModel = tableModel;
}
@Override
public M getModel() {
return tableModel;
}
@Override
public void toggleSortOrder(int column) {
// redirecting sort request to model and modification of sortKeys
List<? extends SortKey> newSortKeys = ...;
setSortKeys(newSortKeys);
}
@Override
public int convertRowIndexToModel(int index) {
return index; // will always be the same
}
@Override
public int convertRowIndexToView(int index) {
return index; // will always be the same
}
@Override
public void setSortKeys(List<? extends SortKey> keys) {
if (keys == null) {
sortKeys = Collections.EMPTY_LIST;
} else {
sortKeys = Collections.unmodifiableList(keys);
}
fireSortOrderChanged();
}
@Override
public List<? extends SortKey> getSortKeys() {
return sortKeys;
}
@Override
public int getViewRowCount() {
return tableModel.getRowCount();
}
@Override
public int getModelRowCount() {
return tableModel.getRowCount();
}
// no need for any implementation
@Override public void modelStructureChanged() { }
@Override public void allRowsChanged() { }
@Override public void rowsInserted(int firstRow, int endRow) { }
@Override public void rowsDeleted(int firstRow, int endRow) { }
@Override public void rowsUpdated(int firstRow, int endRow) { }
@Override public void rowsUpdated(int firstRow, int endRow, int column) { }
}
您可以嘗試使用圖標行爲編寫自定義TableHeader渲染器。 – alex2410
我試過了。但是這個解決方案的問題是,標題渲染器應該使用系統外觀。自定義渲染器顯然不會使用外觀和感覺(除了看起來像標籤或其他東西)。 – user3190008
查看我的答案,它提供了默認的L&F和頭部裝飾解決方案。 – alex2410