2013-03-21 39 views
5

我有一個有多行的JTable,每行都通過散點圖上的Point來呈現。我必須做的是在散點圖上選擇給定點時,我必須將此選擇與JTable中相應行的選擇關聯起來。Java Swing JTable以編程方式選擇多行

我有一個Integer表示,我必須強調哪一行。

我想的是:

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

所以這裏的問題是,這種方法選擇在給定的範圍[索引1,索引2]所有行。我想選擇例如行1,15,28,188等。

你是如何做到的?

感謝, 安東

回答

11

僅選擇一排,把它作爲雙方的開始和結束索引:

table.setRowSelectionInterval(18, 18); 

或者,如果你想選擇多個不連續的指數:

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

或者,您可能會發現實現您自己的子類ListSelectionModel並使用它來跟蹤表和sca上的選擇tterplot是一個更清潔的解決方案,而不是在散點圖上監聽並強制表匹配。

+0

啊哈,這就是我剛纔想,似乎工作正常,我:)謝謝您的回答! – 2013-03-21 19:31:56

1

沒有辦法設置一個隨機選擇了一個方法調用,你需要不止一個執行這種選擇的

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

等等....

+0

@Jäbir在這最後一行之後將被選中。你需要使用'ListSelectionModel',如[post above](http://stackoverflow.com/a/15556376/1196670)中指出的那樣, – 1ac0 2013-03-29 10:40:02

3

它還工作沒有使用的ListSelectionModel:

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

只是不叫setRowSelectionInterval,因爲它總是前清除當前的選擇。

0

這裏是實現這個泛型方法:

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

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