MouseListener auf JTable

DonAqua

Grünschnabel
Hallo,

also ich möchte eine MouseListener auf eine JTable machen. Hierzu hab ich ein paar Fragen. Also als erstes würde mich interessieren ob das was ich mir gedacht hab überhaupt möglich ist. Also ich werde es mal schildern:

In der Tabelle ist eigentlich nur eine Spalte die mich interessiert, also hier die erste Frage ist es überhaupt möglich den Listenere auf Spalten ein zuschränken? Wenn ich über die Spalten fahre oder auf sie klicke, sollen mir zwei weitere Werte in einem kleinen Pop-Up angezeigt werden. Um zu identifizieren welche zwei Werte das sind benötige ich den Wert der in der Spalte steht um ihn dann in einem Select an die Datenbank zusenden und mir die Werte in dem kleinen Pop-Up anzeigen zulassen die mir der Select ausgibt.

Also würde man das überhaupt hinbekommen? Wenn ja ein über Hilfestellungen wäre ich sehr dankbar bin in der Materie Java noch nicht sehr lange drin.

Danke schon mal im Vorraus.

Gruß Don
 
Moin!

Frage ist es überhaupt möglich den Listenere auf Spalten ein zuschränken?
Du kannst den MouseListener nur der kompletten Tabelle zuweisen.
Niemand hindert dich aber daran, nur bei bestimmten Spalten dann auch eine Aktion auszuführen.. Welche Spalte/Zeile angeklickt wurde, erhälst du zum Beispiel so:

Code:
public void mouseClicked(MouseEvent e){
   int row = table.rowAtPoint(e.getPoint());
   int column = table.columnAtPoint(e.getPoint());
}

Wenn ich über die Spalten fahre oder auf sie klicke, sollen mir zwei weitere Werte in einem kleinen Pop-Up angezeigt werden.
Wie man ein PopupMenu einer Tabelle zuweist, kannst du zum Beispiel hier sehen:
http://www.devdaily.com/blog/post/jfc-swing/put-jpopupmenu-on-jtable-jtable-header/

Die generellen Sachen, wie weise ich einen Listener zu, wie reagiere ich auch Events.. nun falls du das noch nicht weist, solltest du dich da erstmal ein wenig einlesen, weil da Grundlagen sind. Hier im Java Forum gibts am Anfang ne Linkliste, wo du viele gute Quellen findest..

*grüssle*
MeinerEiner
 
Hallo,

MeinerEiner 80 hat es schon gepostet, der ausimplementierte MouseListener oder
ein erweiterter MouseAdapter wird der JTable als MouseListener übergeben !

Wie beschrieben bekommt man mit den ...AtPoint(...)-Methoden die Zelle heraus.

Hier kannst du deine Spalte leicht über den column-Wert filtern.

Mit getValueAt(row,col) bekommt man dann den Inhalt dieser Zelle als Object.

Dann nurnoch das PopUp mit DB-Daten initialisieren und mit show(e.getComponent(),e.getX(),e.getY()) anzeigen
und die Events des Menüs verarbeiten und die Zelle entsprechend aktualisieren !

"Klingt Komisch ist aber so" würde Herr P. L. aus B. sagen ! :)

Gruß JAdix
 
Erstmal danke für die Hilfe.

aber ein Probelm hab ich da noch. Und zwar sprichts du hier
public void mouseClicked(MouseEvent e){
int row = table.rowAtPoint(e.getPoint());
int column = table.columnAtPoint(e.getPoint());
}

die table im mouselistener an, aber wie übergeb ich ihm die? Bzw besser wäre es für mich wenn ich den Point von dem Mouselistener zurück bekommen würde. Aber leider bekomm ich das auch noch nicht so ganz hin.
 
Hallo,

zum einen versteckt sich die JTable im Event als auslösende Komponente !
Also hinter e.getComponent(), aber sicher ist
das nur wenn du den Listener exlusiv bei der JTable registrierst !

Zum anderen könnte dein MouseListener z.B. einen Konstruktor haben dem
du JTable übergibst. Diese Referenz speicherst du dann in einem Instanzfeld
deines Listeners !

Gruß JAdix
 
Mit getComponet hört sich gut an. Aber wie fang ich das denn auf also in was für nen Datentyp damit ich das dann ganz normal verwenden kann und die Abfarge darauf machen kann?
int row = table.rowAtPoint(e.getPoint());
int column = table.columnAtPoint(e.getPoint());
 
Hallo,

e.getComponent() gibt, oh welch Wunder, eine Component zurück !

Diese kann so gecastet werden.
Code:
JTable table = (JTable)e.getComponent();

evtl. sollte man sich mit instanceof noch vergewissern das man es wirklich mit ner JTable
zu tun hat, sonst gibts ne CastException ! Sollte aber eigentlich nicht passieren wenn
Listener exklusive ... sagte ich ja bereits !

Gruß JAdix
 
Zurück