Click auf JTable (Zeile) liefert den Eintrag?

Status
Nicht offen für weitere Antworten.

Vril

Bekanntes Mitglied
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?
 
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.
 
Ok, schon mal danke, jetzt hänge ich hier:
Code:
dataModel = new MyTableModel();
		dataModel.addMouseListener(this);
Der MousListener lässt sich so nicht adden!
 
Jetzt habe ich aber hier noch ein Problem:
Code:
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?
 
Ok, das e hat gefehlt, so gehts jetzt:
Code:
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!
 
Also jetzt bin ich ein Stück weiter:
Code:
 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:
Code:
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)
 
Ok, so funktioniert das eine, aber jetzt hab ich noch ein Problem wie ich das ganze mit getValueAt() auch wirklich auslese:
Code:
 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
 
Du musst mittels getValueAt die Werte an der Stelle Zeile=selected Spalte(n)=gewünschte Spalte(n) auslesen!
 
Schon mal danke für den Tip! Aber könntest du evtl. ein bisschen konkreter werden weil ich bekomme es einfach nicht hin!
 
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.
 
Ok:
Code:
int iSelectedRow = table1.getSelectedRow();
Object inhalt = table1.getModel().getValueAt(iSelectedRow, 1).toString();
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben