Problemas para establecer un comparador de columnas en una tabla J

En otro hilo encontré este comparador (parte inferior de la publicación) para clasificar las columnas JTable que podrían estar compuestas de números enteros, cadenas o ambos. No puedo averiguar cómo aplicarlo a mi JTable. Mi tabla estaba usando el clasificador de filas creado automáticamente antes. Lo puse en falso y ahora estoy usando:

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

Obtengo una excepción de índice fuera de límites que dice que estoy proporcionando un rango no válido. Sin embargo, mi tabla tiene varias columnas. ¿Es esta la forma correcta de aplicar el comparador? Siento que esta no es la manera de hacerlo.

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);
                    }
                }
            }
        }
    }
};

Respuestas a la pregunta(2)

Su respuesta a la pregunta