2013-03-21 265 views
5

Tôi có một JTable với nhiều hàng và mỗi hàng được trình bày qua Điểm trên một ô phân tán. Những gì tôi phải làm là khi một điểm nhất định được chọn trên ô phân tán, tôi phải kết hợp lựa chọn này với việc lựa chọn hàng tương ứng trong JTable.Java Swing JTable chọn nhiều hàng lập trình

Tôi có một số nguyên đại diện cho hàng nào tôi phải làm nổi bật.

Những gì tôi cố gắng là:

JTable table = new JTable(); 
... 
...// a bit of code where I have populated the table 
... 
    table.setRowSelectionInterval(index1,index2); 

Vì vậy, vấn đề ở đây là phương pháp này sẽ chọn tất cả các hàng trong phạm vi nhất định [index1, index2]. Tôi muốn chọn ví dụ: các hàng 1,15,28,188 v.v.

Bạn làm như thế nào?

Cảm ơn, Anton

Trả lời

11

Để chọn chỉ một dòng, vượt qua nó như cả hai đầu và cuối chỉ số:

table.setRowSelectionInterval(18, 18); 

Hoặc, nếu bạn muốn chọn nhiều chỉ số, không tiếp giáp:

ListSelectionModel model = table.getSelectionModel(); 
model.clearSelection(); 
model.addSelectionInterval(1, 1); 
model.addSelectionInterval(18, 18); 
model.addSelectionInterval(23, 23); 

Cách khác, bạn có thể thấy rằng việc triển khai lớp con của riêng mình là ListSelectionModel và sử dụng nó để theo dõi lựa chọn trên cả bảng và dấu phẩy tterplot là một giải pháp sạch hơn, hơn là lắng nghe trên tán xạ và buộc bảng để phù hợp.

+0

Aha đó là những gì tôi đã chỉ cố gắng và có vẻ như hoạt động tốt đối với tôi:) Cảm ơn câu trả lời của bạn! –

1

Không có cách nào để thiết lập một lựa chọn ngẫu nhiên với một cuộc gọi một phương pháp, bạn cần nhiều hơn một để thực hiện loại này lựa chọn

table.setRowSelectionInterval(1, 1); 
table.addRowSelectionInterval(15, 15); 
table.setRowSelectionInterval(28, 28); 
table.addRowSelectionInterval(188 , 188); 

và vân vân ....

+0

@ Jäbir sau dòng cuối cùng này sẽ được chọn. bạn cần sử dụng 'ListSelectionModel' như được chỉ ra trong [post above] (http://stackoverflow.com/a/15556376/1196670) – 1ac0

3

Nó cũng hoạt động mà không sử dụng ListSelectionModel:

table.clearSelection(); 
table.addRowSelectionInterval(1, 1); 
table.addRowSelectionInterval(15, 15); 
table.addRowSelectionInterval(28, 28); 
... 

Chỉ cần không gọi setRowSelectionInterval, vì nó luôn xóa lựa chọn hiện tại trước đây.

0

Dưới đây là một phương pháp tổng quát để thực hiện điều này:

public static void setSelectedRows(JTable table, int[] rows) 
{ 
    ListSelectionModel model = table.getSelectionModel(); 
    model.clearSelection(); 

    for (int row : rows) 
    { 
     model.addSelectionInterval(row, row); 
    } 
}