2012-05-25 4 views
5

Я столкнулся с проблемой дублирования строк в JXTable. Если я сортирую данные JXTable, в то время как новые строки вставляются в JXTable, окончательный результат в JXTable показывает повторяющиеся строки, которые приводят к неверному результату в таблице. Даже он также показывает правильное количество строк, которые были вставлены, но некоторые строки полностью отсутствуют, тогда как некоторые строки найдены дублирующимися в JXTable.Как обрабатывать таблицу, которая сортирует и добавляет данные параллельно?

Если я сортирую JXTable после того, как все данные были вставлены успешно, тогда отображаются правильные данные. Если нет повторяющихся строк и нет пробелов.

пример

код: У меня есть метод, который я передаю DefaultTableModel и здесь утра добавления элементов в таблице

public void addingItems(DefaultTableModel defaultTableModel) 
{ 
for(int i=0;i< numberofItems;i++){ 
Vector vobject = new Vector(); 
vobject.add("..."); 
vobject.add("xxx"); 
vobject.add("yyy"); 
... 
.. 
vobject.add(""); 
defaultTableModel.addRow(vobject); 
} 

один другой стороны, я добавлять код сортировки в tableHeader ActionListener

tableheader.addMouseListener(new MouseListener() { 
public void mouseClicked(MouseEvent e) { 
    Vector data = defaultTableModel.getDataVector(); 
    Collections.sort(data, new ColumnSorter(colIndex, ascending)); 
} 

});

Я поставил код в блоке synchronized, но не добился успеха.

Пожалуйста, предоставьте лучшее решение для решения этой проблемы.

+0

Как вы добавляете данные? – Mark

+0

1) Чтобы лучше помочь, опубликуйте [SSCCE] (http://sscce.org/). 2) * «или я должен делать это один за другим?» * Выполнение их последовательно, казалось бы, имеет большой смысл. –

+2

Вы получите более быстрые ответы, если вы покажете [SSCCE] (http://sscce.org). Мистер Томпсон избил меня на этом ;-) – assylias

ответ

1

Я поставил код в синхронизированном блоке, но не добился успеха.

Поскольку вы должны обрабатывать синхронизацию не только в своем блоке обработчика сортировки, но и при каждой операции модификации.

Например:

... 
    vobject.add(""); 
    synchronized(monitor) { 
    defaultTableModel.addRow(vobject); 
    } 
} 

и

... 
    Vector data = defaultTableModel.getDataVector(); 
    synchronized(monitor) { 
    Collections.sort(data, new ColumnSorter(colIndex, ascending)); 
    } 
} 

В этом случае ваш интерфейс может выглядеть несколько отвечать на запросы, если у вас есть много данных в таблице, так как сортировка N^2 * LogN. Если у вас около 200 записей, это не будет проблемой для вас.

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

  • Нет связанных вопросов^_^