JTable +排序列,但行未排序

时间:2011-01-04 15:56:17

标签: sorting jtable

我创建了一个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 :(得分:0)

我发现了问题,我反对的对象是错误的,我改变了相同的代码,一切正常。

我实现了QuickSort算法来对我需要的特定列上的向量进行排序。