2013-03-21 4 views
5

У меня есть JTable с несколькими строками, и каждая строка представлена ​​через Point на участке разброса. То, что мне нужно сделать, - это когда выбранная точка выбрана на участке рассеяния, мне нужно связать этот выбор с выбором соответствующей строки в JTable.Java Swing JTable выбирает программно несколько строк

У меня есть целое число, которое представляет, какую строку я должен выделить.

То, что я попытался это:

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

Таким образом, проблема здесь в том, что этот метод выбирает все строки в заданном диапазоне [INDEX1, index2]. Я хочу выбрать, например, строки 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 и использовать его для отслеживания выбора как на столе и АСС tterplot - более чистое решение, вместо того, чтобы прослушивать диаграмму рассеяния и заставлять таблицу соответствовать.

+0

Aha это то, что я только что попробовал, и мне кажется, что хорошо работает для меня:) Спасибо за ваш ответ! –

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

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