2012-05-25 13 views
5

Tôi đang gặp sự cố của các hàng trùng lặp trong số JXTable. Nếu tôi sắp xếp dữ liệu JXTable trong khi các hàng mới đang được chèn vào trong JXTable, kết quả cuối cùng trong JXTable sẽ hiển thị các hàng trùng lặp làm cho kết quả không hợp lệ trong bảng. Thậm chí nó cũng hiển thị số lượng hàng chính xác đã được chèn nhưng một số hàng bị thiếu hoàn toàn trong khi một số hàng được tìm thấy trùng lặp trong JXTable.Làm cách nào để xử lý bảng sắp xếp và thêm dữ liệu song song?

Nếu tôi sắp xếp JXTable sau khi tất cả dữ liệu đã được chèn thành công thì nó sẽ hiển thị dữ liệu chính xác, tức là không có hàng trùng lặp và không có hàng nào bị thiếu.

dụ

mã: Tôi có một phương pháp mà tôi đi qua defaultTableModel và đây là sáng thêm các mục trong bảng

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

một Mặt khác tôi đã thêm mã phân loại tại tableHeader ActionListener

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

});

Tôi đã đặt mã trong khối synchronized nhưng không thành công.

Vui lòng cung cấp giải pháp tốt hơn để xử lý vấn đề này.

+0

Bạn đang thêm dữ liệu như thế nào? – Mark

+0

1) Để được trợ giúp tốt hơn sớm hơn, hãy đăng một [SSCCE] (http://sscce.org/). 2) * "hoặc tôi phải làm điều này từng cái một?" * Làm chúng tuần tự sẽ có vẻ rất có ý nghĩa. –

+2

Bạn sẽ có câu trả lời tốt hơn và nhanh hơn nếu bạn hiển thị [SSCCE] (http://sscce.org). Ông Thompson đã đánh tôi trên một ;-) – assylias

Trả lời

1

Tôi đã đặt mã trong khối được đồng bộ hóa nhưng không thành công.

Vì bạn phải xử lý đồng bộ hóa không chỉ trong khối xử lý sắp xếp của mình mà còn trên mỗi thao tác sửa đổi.

Ví dụ:

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

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

Trong trường hợp này UI của bạn có thể trông hơi không đáp ứng nếu bạn có rất nhiều dữ liệu trong bảng của bạn bởi vì loại là N^2 * logN. Nếu bạn có khoảng 200 mục nhập - nó sẽ không gây ra vấn đề gì cho bạn.