Проблема с установкой компаратора столбца в JTable

В другой теме я нашел этот компаратор (внизу поста) для сортировки столбцов JTable, которые могут состоять из целых чисел, строк или обоих. Я не могу понять, как применить его к моему JTable. Моя таблица раньше использовала автоматически созданный сортировщик строк. Я установил это в ложь, и теперь я использую:

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

Я получаю исключение индекса за пределами границ, говоря, что я предоставляю недопустимый диапазон. Моя таблица имеет несколько столбцов. Это правильный способ применения компаратора? Я чувствую, что это не способ сделать это.

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

Ответы на вопрос(2)

Ваш ответ на вопрос