# Click auf JTable (Zeile) liefert den Eintrag?



## Vril (9. Aug 2005)

Hallo,

ich hab da einen JTable der durch eine DB gefüllt ist! Jetzt würde ich gerne auf einen Eintrag (Zeile) im JTable clicken und dadurch ein neues Fenster öffnen das den gesamten Eintrag durch meine "Click-Auswahl auf den JTable" anzeigt.

Mein Problem ist, wie stelle ich es am besten an das ich auf meinen JTable clicken kann und dann der Inhalt der geclickten Zeile angezeigt wird?


----------



## Beni (9. Aug 2005)

Eigentlich sollte es reichen, dem JTable einen MouseListener zu überreichen (addMouseListener).
Bei einem mouseClicked-Event kannst du über _JTable.rowAtPoint_ rausfinden, wo geklickt wurde, und über das _TableModel (JTable.getModel)_ kannst du alle Infos über diese Zeile abrufen.


----------



## Vril (9. Aug 2005)

Ok, schon mal danke, jetzt hänge ich hier:

```
dataModel = new MyTableModel();
		dataModel.addMouseListener(this);
```
Der MousListener lässt sich so nicht adden!


----------



## Vril (9. Aug 2005)

Habs schon... 
table1.addMouseListener(this);


----------



## Vril (9. Aug 2005)

Jetzt habe ich aber hier noch ein Problem:

```
public void mouseClicked(MouseEvent e){
  	System.out.println("Mouse clicked");
  	int was = table1.rowAtPoint;
  	int x = getX();
  	
  	int y = getY();
  	System.out.println("Koordinaten: "+x+" "+y);
```
Bei rowAtPoint gibt es Probleme und bei den Koordinaten wird immer nur 0 0 ausgegeben! An was könnte das liegen?


----------



## Vril (9. Aug 2005)

Ok, das e hat gefehlt, so gehts jetzt:

```
public void mouseClicked(MouseEvent e){
  	System.out.println("Mouse clicked");
  	Point p = e.getPoint();
  	int x = e.getX();
  	int y = e.getY();
  	String select = table1.getModel(p);
  	System.out.println(p);
  	System.out.println("Koordinaten: "+x+" "+y);
  }
```
Aber wie bekomme ich jetzt den genauen Eintrag, also den Inhalt des JTables an dieser Stelle? Komm da mit dem getModel() nicht richtig klar!


----------



## Vril (10. Aug 2005)

Also jetzt bin ich ein Stück weiter:

```
public void mouseClicked(MouseEvent e){
  	System.out.println("Mouse clicked");
  	
  	Point p = e.getPoint();
  	int x = e.getX();
  	int y = e.getY();
  	//String data = table1.getValueAt(x, y).toString();

  	//System.out.println("Die row: "+was);
  //	int test = rowAtPoint(p);
  	int selected = table1.rowAtPoint(e.getPoint());
  	//System.out.println("Selected "+selected);
  	//String select = table1.getValueAt(selected);
  	System.out.println(p);
  	System.out.println("Koordinaten: "+x+" "+y);
```
Wir sauber compilet, aber in der DOS-Box, Konsole, steht beim click auf einen Eintrag im JTable dann folgendes:

```
enable Tooltips: SELECTED
Mouse clicked
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
        at HaptikMain.mouseClicked(HaptikMain.java:268)
        at java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:21
2)
        at java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:21
1)
        at java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:21
1)
        at java.awt.Component.processMouseEvent(Component.java:5491)
        at javax.swing.JComponent.processMouseEvent(JComponent.java:3093)
        at java.awt.Component.processEvent(Component.java:5253)
        at java.awt.Container.processEvent(Container.java:1966)
        at java.awt.Component.dispatchEventImpl(Component.java:3955)
        at java.awt.Container.dispatchEventImpl(Container.java:2024)
        at java.awt.Component.dispatchEvent(Component.java:3803)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4212
)
        at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3901)

        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3822)
        at java.awt.Container.dispatchEventImpl(Container.java:2010)
        at java.awt.Window.dispatchEventImpl(Window.java:1766)
        at java.awt.Component.dispatchEvent(Component.java:3803)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:463)
        at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchTh
read.java:234)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThre
ad.java:163)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)

        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)

        at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)
```


----------



## Vril (10. Aug 2005)

Ok, so funktioniert das eine, aber jetzt hab ich noch ein Problem wie ich das ganze mit getValueAt() auch wirklich auslese:

```
public void mouseClicked(MouseEvent e){
  	System.out.println("Mouse clicked");
  	
  	Point p = e.getPoint();
  	int x = e.getX();
  	int y = e.getY();
  	//String data = table1.getValueAt(x, y).toString();

  	//System.out.println("Die row: "+was);
  //	int test = rowAtPoint(p);
  	int selected = table1.rowAtPoint(p);
  	//System.out.println("Selected "+selected);
  	Object select = table1.getValueAt(x,y);
  	System.out.println("komisch: "+selected);
  	System.out.println(p);
  	System.out.println("Koordinaten: "+x+" "+y);
  }
```
Jetzt


----------



## Sky (10. Aug 2005)

Du musst mittels getValueAt die Werte an der Stelle Zeile=selected Spalte(n)=gewünschte Spalte(n) auslesen!


----------



## Vril (10. Aug 2005)

Schon mal danke für den Tip! Aber könntest du evtl. ein bisschen konkreter werden weil ich bekomme es einfach nicht hin!


----------



## Sky (10. Aug 2005)

noch konkreter ?

Du willst alle Werte einer Zeile haben. so ist die Zeile immer 'rowAtPoint' also 'selected' und die Spalte von 0 an beginnend bis zur Anzahl Spalten.


----------



## Vril (10. Aug 2005)

Ok:

```
int iSelectedRow = table1.getSelectedRow();
Object inhalt = table1.getModel().getValueAt(iSelectedRow, 1).toString();
```


----------

