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

一方、tableHeaderactionlistenerでソートのコードを追加しています

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

この場合、並べ替えがN ^ 2 * logNであるため、テーブルに大量のデータがあると、UIが多少応答しなくなる可能性があります。エントリが約200ある場合は、問題はありません。

于 2012-06-18T08:41:59.710 に答える