有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在JTable中按列对行进行排序

单击我的JTable上的列标题时,它会按字母顺序对行进行排序。这适用于我所有的专栏,只有一篇除外。此列中的值均为字符串,但包含数字。我需要根据它们的十进制值而不是字符串值对它们进行排序

你知道如何做到这一点吗


共 (2) 个答案

  1. # 1 楼答案

    请阅读关于JTable的教程,其中包含TableRowSorter示例

    答案是这些代码行,正确设置列类

    public Class getColumnClass(int c) {
       return getValueAt(0, c).getClass();
    }
    
    // or could be in most cases hardcoded, and I'm using that too
    
                @Override
                public Class<?> getColumnClass(int colNum) {
                    switch (colNum) {
                        case 0:
                            return Integer.class;
                        case 1:
                            return Double.class;
                        case 2:
                            return Long.class;
                        case 3:
                            return Boolean.class;
                        case 4:
                            return String.class;
                        case 5:
                            return Icon.class;
                        /*case 6:
                        return Double.class;
                        case 7:
                        return Double.class;
                        case 8:
                        return Double.class;*/
                        default:
                            return String.class;
                    }
                } 
    
  2. # 2 楼答案

    默认的行分类器将根据列类进行排序。如果column类是Object(默认值),那么它使用toString()方法。如果您可以将输入到列中的内容更改为实现可比较接口的内容(例如Integer/Double),那么它将使用该比较器。您还必须更改表模型上的列类

    为此,必须扩展DefaultTableModel(或实现AbstractTableModel或TableModel)并重写getColumnClass()方法

    如果无法更改进入列中的数据(出于某种原因,您希望在其中存储字符串),则必须修改表的行分类器

    DefaultRowSorter rowSorter = new DefaultRowSorter();
    rowSorter.setComparator(numberColumnIndex,numberSortingComparator);
    table.setRowSorter(rowSorter);