java - JTable 和排序

标签 java swing sorting jtable

我对 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/

相关文章:

java - 我如何按字母顺序对数组列表进行排序

java - 如何使用 Java 8 按某个特定键的值对 map 列表进行排序?

java - 从 HTML 网页读取 URL 并将其写入文件

java - 一个程序运行在多个 JVM 上?

java - 在java中向数组添加新元素从左向右移动一步

java - Tomcat 更新事件

java - 当我在 apache poi 库中使用 Calibri 字体时,可运行 jar 中的列宽无法正确显示

javascript - react-table 排序不适用于具有自定义单元格的列

java - for 循环第一次运行时什么都不做?可能是编程逻辑错误?

java - Swing - 将图像添加到 GUI