Probleme beim Setzen eines Spaltenkomparators auf eine JTable

In einem anderen Thread habe ich diesen Komparator (unten im Beitrag) zum Sortieren von JTable-Spalten gefunden, die aus Ganzzahlen, Zeichenfolgen oder beidem bestehen können. Ich kann nicht herausfinden, wie ich es auf meine JTable anwenden soll. Meine Tabelle verwendete zuvor den automatisch erstellten Zeilensortierer. Ich habe das auf false gesetzt und verwende jetzt:

TableRowSorter<MyTableModel> rowSorter = new TableRowSorter<MyTableModel>();
jtable.setRowSorter(rowSorter);
rowSorter.setComparator(0, c1);

Ich erhalte eine Ausnahme, die besagt, dass ein ungültiger Bereich angegeben wird. Meine Tabelle enthält jedoch mehrere Spalten. Ist dies der richtige Weg, um den Komparator anzuwenden? Ich glaube, das ist nicht der richtige Weg.

Comparator c1 = new java.util.Comparator() {
    /**
     * Custom compare to sort numbers as numbers.
     * Strings as strings, with numbers ordered before strings.
     * 
     * @param o1
     * @param o2
     * @return
     */
@Override
            public int compare(Object oo1, Object oo2) {
                boolean isFirstNumeric, isSecondNumeric;
                String o1 = oo1.toString(), o2 = oo2.toString();


        isFirstNumeric = o1.matches("\\d+");
        isSecondNumeric = o2.matches("\\d+");

        if (isFirstNumeric) {
            if (isSecondNumeric) {
                return Integer.valueOf(o1).compareTo(Integer.valueOf(o2));
            } else {
                return -1; // numbers always smaller than letters
            }
        } else {
            if (isSecondNumeric) {
                return 1; // numbers always smaller than letters
            } else {
                isFirstNumeric = o1.split("[^0-9]")[0].matches("\\d+");
                isSecondNumeric = o2.split("[^0-9]")[0].matches("\\d+");

                if (isFirstNumeric) {
                    if (isSecondNumeric) {
                        int intCompare = Integer.valueOf(o1.split("[^0-9]")[0]).compareTo(Integer.valueOf(o2.split("[^0-9]")[0]));
                        if (intCompare == 0) {
                            return o1.compareToIgnoreCase(o2);
                        }
                        return intCompare;
                    } else {
                        return -1; // numbers always smaller than letters
                    }
                } else {
                    if (isSecondNumeric) {
                        return 1; // numbers always smaller than letters
                    } else {
                        return o1.compareToIgnoreCase(o2);
                    }
                }
            }
        }
    }
};

Antworten auf die Frage(2)

Ihre Antwort auf die Frage