Столбец сортировки JTable +, но строка не отсортирована - PullRequest
0 голосов
/ 04 января 2011

Я создал JTable, таблица содержит 4 строки, и для конкретной строки я переопределил сортировку и она работает нормально только для этого столбца.

Status  Scheduled Date  Scheduled time  Status          
false   30/01/2012  02:00:00    Scheduled   
false   29/01/2012  14:58:00    Scheduled   
false   29/01/2012  15:50:00    Scheduled   

Для запланированной даты, которую я пытаюсь отсортировать, она сортируется, но соответствующие строки не обновляются.

Вот мой код для сортировки

public static void sortColumn(DefaultTableModel model, int colIndex,
            boolean sortingOrder) {

        Vector<?> data = model.getDataVector();
        Object[] colData = new Object[model.getRowCount()];
        SortedSet<Object> dataCollected = null;
        List<Date> dateCollected;
        boolean dateFlag = false;

        dateCollected = new ArrayList<Date>();

        // Copy the column data in an array
        for (int i = 0; i < colData.length; i++) {

            Object tempData = ((Vector<?>) data.get(i)).get(colIndex);

            if ((colIndex == 1 || colIndex == 4)
                    && tempData.toString().contains("/")) {
                String[] _scheduledDate1 = ((String) tempData).split("/");
                Calendar _cal1 = Calendar.getInstance();
                _cal1.set(Integer.parseInt(_scheduledDate1[2]),
                        Integer.parseInt(_scheduledDate1[1]) - 1,
                        Integer.parseInt(_scheduledDate1[0]));

                dateCollected.add(_cal1.getTime());
                dateFlag = true;
            } else {
                colData[i] = ((Vector<?>) data.get(i)).get(colIndex);
            }
        }

        // DateCompare compare = new DateCompare();
        if (!dateFlag) {
            dataCollected = new TreeSet<Object>();

            dataCollected.add(colData);

            dateFlag = false;
        }

        // Copy the sorted values back into the table model
        if ((colIndex == 1 || colIndex == 4) && dateFlag) {
            SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
            sortOrder = !sortOrder;

            if (sortOrder) {
                Collections.sort(dateCollected);
            } else {
                Collections.sort(dateCollected, Collections.reverseOrder());
            }

            colData = dateCollected.toArray();
            for (int i = 0; i < colData.length; i++) {
                ((Vector<Object>) data.get(i)).set(colIndex,
                        sdf.format(((Date) colData[i]).getTime()));
            }
        } else {
            for (int i = 0; i < colData.length; i++) {
                ((Vector<Object>) data.get(i)).set(colIndex, colData[i]);
            }
        }

        model.fireTableStructureChanged();
    }

Как мне получить обновление всей строки соответственно?

1 Ответ

0 голосов
/ 07 января 2011

Я обнаружил проблему, мой объект, с которым я сравнивал, был неправильным, я изменил код на тот же, все работает нормально.

Я реализовал алгоритм быстрой сортировки для сортировки вектора по нужному столбцу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...