# Mit SelectionListener herausfinden welche zeile in Jtable angeklickt wurde



## continue (18. Mrz 2010)

Hallo,
Ich habe einen JTable in meiner applikation, nun möchte ich, wenn der User eine Line der Tabelle anklickt, wissen welche Zeile das war (also row index) und am besten auf die daten in der Zeile zugreifen können....

nunja
meine Tabelle....

```
table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
table.getSelectionModel().addListSelectionListener(new MySelectionListener(table));
```

Mein listener:

```
public class MySelectionListener implements ListSelectionListener{

	JTable table;
	
	public MySelectionListener(JTable table) {
		this.table = table;
	}
	@Override
	public void valueChanged(ListSelectionEvent e) {
		System.out.println(table.getSelectedRow());
	}

}
```


Das funktioniert gut.. es wird der entsprechende rowindex ausgegeben... jedoch passiert das zweimal...einmal wenn ich auf die tabelleklicke und einmal wenn ich den mousebutton loslasse....
Als bei einen klickvorgang wird dasevent wohl zweimal abgefeuert...
Das möchte ich aber nicht weil dann auch die aktion die ich machen möchte zweimal passiert :/
Ist das der falsche weg um das zu realisieren? 
Ich glaube ich verwende die falsche methode.. (heißt ja schon valueChanged, bei mir sind aber keine änderungen in der tabelle, sondern ich möchte nur, wenn der user die row anklickt mitden darin enthaltenen daten etwas anstellen.....)

Wie macht man das am besten?


----------



## eRaaaa (18. Mrz 2010)

Probier mal folgendes:

```
@Override
	public void valueChanged(ListSelectionEvent e) {
	    if (e.getValueIsAdjusting()) {
		return;
	    }
	    System.out.println(table.getSelectedRow());
	}
```

How to Use Tables (The Java™ Tutorials > Creating a GUI With JFC/Swing > Using Swing Components)


----------



## continue (18. Mrz 2010)

eRaaaa hat gesagt.:


> Probier mal folgendes:
> 
> ```
> @Override
> ...



danke  das würde gehen,
aber ist das nicht irgendwie schlampig?


----------



## Meru (18. Mrz 2010)

Warum sollte das schlampig sein?
Also es ist nicht schlampig sondern eher üblich


----------



## Michael... (18. Mrz 2010)

man könnte das auch so machen

```
public void valueChanged(ListSelectionEvent e) {
        if (!e.getValueIsAdjusting()) {
             System.out.println(table.getSelectedRow());
        }
}
```
Abgesehen davon liefert das Event mit den Methoden getFirstIndex() und getLastIndex() den ersten und letzten Zeilenindex der Selektion, die Tabelle selbst muss im Listener als gar nicht bekannt sein.

Dass der Listener zweimal in Folge ein Event wirft liegt daran, das er auf Deselektion und Selektion reagiert.


----------



## continue (18. Mrz 2010)

Danke für die Antworten 
Ich habe jetzt aber einfach einen MouseListener auf die Tabelle geklatscht...keine ahnung warum ich sofort an selectionListener gedacht hab... aber danke für die tipps


----------

