我对 JTable 进行排序时没有什么问题,但无法获得我想要的功能。在我的窗口中,我有类似总指挥官的东西,在一列中有文件,如果有的话,另一列中有父文件夹或字节数。我想要的是,如果我单击“文件名”列,我希望父文件夹始终位于顶部,然后是升序/降序文件夹名称,然后是升序/降序文件名,如果我单击“文件类型”,我希望目录保持不变,然后我想要按大小升序/降序排列普通文件。
我尝试玩弄 RowSorters,我自己的比较器,但正如我所说,我无法得到我想要的东西,我应该自己捕获事件,然后手动对值进行排序并更新我的模型(顺便说一句,我使用它。)?有什么优雅的方式来做我想做的事吗?
最佳答案
听起来您可能想使用树表。请查看:http://java.sun.com/products/jfc/tsc/articles/treetable1/
如果您想使用 JTable 本身,那么您可以尝试在表模型中实现排序,因为它可能更容易。
TableRowSorter<TableModel> sorter =
new TableRowSorter<TableModel>(getModel()) {
Map<Integer, SortKey> keys = new HashMap<Integer, SortKey>();
public void toggleSortOrder(int column)
{
SortKey key = keys.get(column);
SortOrder order = null;
// Get last sort order.
if (key != null) {
if (key.getSortOrder() == SortOrder.DESCENDING){
order = SortOrder.ASCENDING;
}
else {
order = SortOrder.DESCENDING;
}
}
else {
order = SortOrder.DESCENDING;
}
keys.put(new SortKey(column, order));
getTableModel().sort(keys);
}
};
setRowSorter(sorter);
关于java - JTable 和排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8625408/