PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : ActionListener in JTable?



mwanaheri
16-01-2006, 11:59
Ich habe folgendes Problem:
In einem Dialogfenster wird eine Tablle angeboten, aus der der Nutzer eine Zeile auswählen soll, aus der dann der Rückgabewert des Dialoges kommt. Die "natürliche" Erwartung ist nun, dass nach Auswahl einer Zeile ein <return> den Dialog schließt und den Wert übergibt. Leuchtet mir ein. Mein Problem dabei:
weder das ScrollPane, noch die JTable, noch das TableModel lassen einen ActionListener zu.
Hat jemand eine andere Perspektive für den Ochs vorm Berge?

Caveman
16-01-2006, 13:42
Von was wird das Daten-Model abgeleitet?
Von TableModel oder von AbstractTableModel?

Die Informationen sind etwas wenig!

McFraggle
16-01-2006, 16:37
Vielleicht hilft Dir folgende Passage aus dem Javabuch von Krüger:


Eine JTable generiert eine Vielzahl von Ereignissen, um registrierte Listener über Änderungen des Tabellenzustands zu informieren. Will ein Objekt beispielsweise darüber informiert werden, daß sich die Selektion geändert hat, muß es zwei ListSelectionListener registrieren. Einer davon wird auf dem Selektionsmodell registriert, das mit getSelectionModel ermittelt werden kann. Da dieser nur Informationen über Änderungen an der Zeilenselektion versendet, muß ein zweiter Listener auf dem Modell für die Spaltenselektion registriert werden. Es kann durch Aufruf von getColumnModel beschafft werden, und auf sein Selektionsmodell kann ebenfalls mit getSelectionModel zugegriffen werden. Bei jeder Änderung der Selektion wird nun valueChanged aufgerufen und kann mit Hilfe der oben erläuterten Methoden herausfinden, welche Zeilen und Spalten selektiert sind.

Wie ich Dich verstanden habe, ist die Spalte für Dich irrelevant. Dann sollte es nicht allzu kompliziert sein.

mwanaheri
16-01-2006, 19:44
@ Caveman
Das Tabellenmodell ist von AbstractTableModel abgeleitet.
Stimmt schon, die Informationen waren reichlich dünn. Ich bin im Moment bei der Nutzerperspektive und daher gedanklich dem Quellcode etwas entrückt. Sorry.

@ McFraggle
Ja, offenbar werden eine Menge Ereignisse ausgelöst. Allerdings beziehen die sich meistens auf den Tabellenzustand. Ein ActionListener ist halt nicht unterzubringen.

Im Moment habe ich mir mit einem KeyListener beholfen, der den Keycode abfragt und eben auf Enter reagiert. Zwar brauche ich den KeyListener ohnehin für den Dialog, in der Tabelle <Enter> damit abzufangen finde ich allerdings etwas unelegant. Das könnte später die Wartung etwas erschweren wenn ich das gleiche Ereignis in zwei unterschiedlichen Handlern bearbeiten muss.
Lieber wäre es mir, ich könnte die Tabelle (oder das Tabellenmodell) dazu bewegen, ein ActionEvent abzufeuern, damit ich die Action-Behandlung einheitlich habe.

Einstweilen schon mal vielen Dank euch Beiden.