0

このコードがまだ私のコンパレーターの使用を拒否している理由を誰かが理解できますか? これはすべて userTable オブジェクトに関連するコードです + そこにはマウスとキーのリスナーがありますが、並べ替えには影響していないと思います。

private TableRowSorter trs;

public constructor() {
initComponents();
...
trs = new TableRowSorter<>(userTable.getModel());

    class IntComparator implements Comparator {

        @Override
        public int compare(Object o1, Object o2) {
            System.out.println("comparing");
            Integer int1 = (Integer) o1;
            Integer int2 = (Integer) o2;
            return int1.compareTo(int2);
        }

    }

    trs.setComparator(0, new IntComparator());
    userTable.setRowSorter(trs);
...
}

private void initComponents() {
...
userTable = new javax.swing.JTable(){
            @Override
            public TableCellRenderer getCellRenderer(int row, int column) {
                return renderer;
            }
        };
...
userTable.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {

            },
            new String [] {
                "ID", "count", "null"
            }
        ) {
            Class[] types = new Class [] {
                java.lang.Integer.class, java.lang.Integer.class, java.lang.Object.class
            };
            boolean[] canEdit = new boolean [] {
                false, false, false
            };

            public Class getColumnClass(int columnIndex) {
                return types [columnIndex];
            }

            public boolean isCellEditable(int rowIndex, int columnIndex) {
                return canEdit [columnIndex];
            }
        });

}

RADIXソートを実行し続け、「比較中」というメッセージも表示されません。ありがとうございました。

4

2 に答える 2

0

http://download.java.net/jdk8/docs/api/javax/swing/DefaultRowSorter.html#setComparator(int , java.util.Comparator)

  1. おそらく「ソート」を呼び出す必要があります
  2. おそらく、開始列として「1」を指定する必要があります(わからない、ただの予感です)
于 2012-12-26T13:36:09.070 に答える
0

問題は、適切なデータ型を設定していない JDBS を使用して、そのテーブルが DB から入力されたことです。テーブル列自体は整数または浮動小数点として設定されていましたが、DB から読み取られたデータは文字列と見なされていました。

switch (rs.getMetaData().getColumnType(i + 1)) {
                        case 93: //DATE
                            rowData[i] = rs.getDate(i + 1).toString() + "> " + rs.getTime(i + 1);
                            break;
                        default:
                            rowData[i] = rs.getString(i + 1);
                            break;
                    }

新しいコードは次のようになります。

switch (rs.getMetaData().getColumnType(i + 1)) {
                        case 93:
                            rowData[i] = rs.getDate(i + 1).toString() + "> " + rs.getTime(i + 1);
                            break;
                        case 4:
                            rowData[i] = rs.getInt(i + 1);
                            break;
                        case -5:
                            rowData[i] = rs.getLong(i + 1);
                            break;
                        case 7:
                            rowData[i] = rs.getFloat(i + 1);
                            break;
                        default:
                            rowData[i] = rs.getString(i + 1);
                            break;
                    }

Jtableには、netbeansのチェックボックスによって構築されたデフォルトの行ソータがあります:D

于 2012-12-29T10:23:44.203 に答える