2011-01-04 3 views
0

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

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 

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

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

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

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

+0

Я понял, где мне нужно изменить, но не уверен, как это сделать. При установке данных обратно ((Вектор ) data.get (i)). Set (colIndex, colData [i]); Я просто делаю эту колонку, не хватает других столбцов, как мне получить всю строку и отправил данные соответственно? – Vivek

+0

Стоит ли сравнивать между новым столбцом и старым и обменивать строки, если да, как мне выполнить замену в векторе, должны ли выполняться нормальные две петли? – Vivek

ответ

0

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

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

Смежные вопросы