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块中,但没有成功。

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

4

1 回答 1

1

我已将代码放在同步块中,但没有成功。

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

例如:

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

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

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

于 2012-06-18T08:41:59.710 回答