# JTable - mehrere Zeilen selektieren



## Max Meisner (20. Jul 2009)

Einen schönen Guten Tag zusammen!

Als Neuling in Sachen Java habe ich folgendes Problem:

Ich habe eine JTable mit 5 Zeilen. Nun möchte ich per Code nur die Zeilen 2 und 4 komplett selektieren.

Wenn ich mittels
tabelle.setRowSelectionInterval(2, 2);
nur die zweite Zeile selektiere, funktioniert das.
Selektiere ich jedoch danach auf die gleiche weise Zeile 4 ist danach nur noch diese (4) selektiert.
Wie kann ich mehrere Zeilen unabhängig von einander (kein verbundener Bereich) selektieren?

Vielen Dank im Voraus fuer Eure Hilfe!


----------



## Ebenius (20. Jul 2009)

In dem Fall musst Du über das SelectionModel gehen:

```
final ListSelectionModel sm = tabelle.getSelectionModel();
sm.setSelectionInterval(1, 1);
sm.addSelectionInterval(3, 3);
```
Ebenius


----------



## Max Meisner (20. Jul 2009)

Vielen Dank fuer die Hilfe,
aber ich kriege das auch damit nicht hin.

Wenn ich beide Zeilen (zum Selektieren) wie oben beschreiben anwende ist immer nur die zuletzt angegebene Zeile in der Tabelle ausgewählt.

Wie kann man zusätzliche Zeilen selektieren ohne einen verbundenen Block zu bilden?

Danke fuer den bisherigen Tipp!


----------



## Ebenius (20. Jul 2009)

Zusätzlich muss man dem SelectionModel *vorher* erlauben, mehrere Intervalle zu selektieren:

```
sm.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
```
Ebenius


----------



## Max Meisner (20. Jul 2009)

Hurra, es funktioniert -

Vielen Dank für die rasche Hilfe!!!


----------



## Max Meisner (21. Jul 2009)

Irrtum - es funktioniert anscheinend nicht immer!?

Zum Testen der Selektierung von Tabellenzeilen habe ich folgendes, sehr spantanisches Programm erstellt.


```
package muster;

import java.awt.BorderLayout;

import javax.swing.JFrame;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;

public class Tabelle extends JFrame {
	private String[][] daten = {{"eins", "- 1 -"},
			{"zwei", "- 2 -"},
			{"drei", "- 3 -"},
			{"vier", "- 4 -"}};
	
	private String[] koepfe = {"A", "B"};
	
	/**
	 * Konstruktor
	 */
	public Tabelle() {
		this.setSize(400, 200);
		this.setLayout(new BorderLayout());
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		JTable neueTabelle = new JTable(daten, koepfe);
		neueTabelle.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
		
		this.add(neueTabelle, BorderLayout.CENTER);
		
		ListSelectionModel sm = neueTabelle.getSelectionModel();

		// Beginn --- Version 1 ---
//		sm.setSelectionInterval(1, 1);
//		sm.addSelectionInterval(3, 3);
		// Ende ----- Version 1 ---
		
		// Beginn --- Version 2 ---
		int[] zeilennummern = new int[] {1, 3};
		
		for (int i = 0; i < zeilennummern.length; i++) {
			sm.setSelectionInterval(zeilennummern[i], zeilennummern[i]);
		}
		// Ende ----- Version 2 ---
		
		this.setVisible(true);
	}
	
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		new Tabelle();
	}

}
```

Wenn ich den Bereich mit der Kennzeichnung "Beginn - Version 1" zur Selektion der Tabellenzeilen verwende, funktioniert alles wie gewünscht. Die zweite und die vierte Tabellenzeile werden selektiert.

Verwende ich jedoch den Bereich "Beginn - Version 2", welcher für mein Dafürhalten das gleich tun sollte, ist immer nur die vierte Tabellenzeile selektiert.

Wer kann den Fehler entdecken - ich komme einfach nicht dahinter?

Vielen Dank fuer einen weiteren Tipp!


----------



## Michael... (21. Jul 2009)

Max Meisner hat gesagt.:


> [JAVA=32]		// Beginn --- Version 1 ---
> //		sm.setSelectionInterval(1, 1);
> //		sm.addSelectionInterval(3, 3);
> // Ende ----- Version 1 ---
> ...


_
Der Unterschied liegt in den verwendeten Methoden *add*SelectionInterval *set*SelectionInterval_


----------



## Max Meisner (21. Jul 2009)

Vielen Dank für den entscheidenden Hinweis, da habe ich anscheinend den Wald vor lauter Bäumen nicht gesehen und den Unterschied zwischen set... und add... im Quellcode überlesen.

Danke für die rasche Hilfe!


----------

