2013-03-21 26 views
5

Mam JTable z wieloma wierszami i każdy wiersz jest przedstawiony przez punkt na wykresie punktowym. To, co muszę zrobić, to gdy dany punkt zostanie wybrany na wykresie rozproszonym, muszę powiązać ten wybór z wyborem odpowiedniego wiersza w JTable.Java Swing JTable wybierz programowo wiele wierszy

Mam liczbę całkowitą reprezentującą, który wiersz muszę podświetlić.

Co próbowałem to:

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

Więc tu jest problem, że metoda ta wybiera wszystkie wiersze w danym zakresie [index1, Index2]. Chcę wybrać np. Wiersze 1,15,28,188 itp.

Jak to zrobić?

Dzięki, Anton

Odpowiedz

11

Aby wybrać tylko jeden wiersz, przekazać ją jako zarówno rozpoczęcia i zakończenia index:

table.setRowSelectionInterval(18, 18); 

Albo, jeśli chcesz wybrać kilka nieciągłych indeksy:

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

Alternatywnie, może się okazać, że wdrożenie swoją podklasę ListSelectionModel i używając go do śledzenia wybór zarówno na stole i SCA tterplot to czystsze rozwiązanie, a nie słuchanie na scatterplot i zmuszanie stołu do dopasowania.

+0

Aha to co właśnie próbowałem i wydaje się, że działa dobrze dla mnie:) Dzięki za odpowiedź! –

1

Nie ma sposobu, aby ustawić losowy wybór z połączenia jednej metody, trzeba więcej niż jednego do wykonywania tego rodzaju selekcji

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

i tak dalej ....

+0

@ Jäbir po wybraniu tej ostatniej linii. musisz użyć 'ListSelectionModel' jak wskazano w [post powyżej] (http://stackoverflow.com/a/15556376/1196670) – 1ac0

3

także działa bez użycia ListSelectionModel:

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

Tylko nie wywołać setRowSelectionInterval, jak zawsze kasuje listę wybranych wcześniej.

0

Oto ogólny sposób do osiągnięcia tego celu:

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

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