如何处理表并行排序和添加数据?

时间:2012-05-25 09:18:45

标签: java sorting jxtable

我遇到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块但未取得成功。

请提供更好的解决方案来处理此问题。

1 个答案:

答案 0 :(得分:1)

  

我已将代码放入synchronized块但未取得成功。

因为您不仅要在排序处理程序块中处理同步,还要处理每个修改操作的同步。

例如:

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

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

在这种情况下,如果您的表中有大量数据,那么您的UI可能看起来有些无法响应,因为sort是N ^ 2 * logN。如果您有大约200个条目 - 这对您来说不会有问题。