Zelle mit berechnungsmaske

hippokeng

Grünschnabel
Halleluja!
Wie erzeugt man folgende elegante Lösung?

Ich habe eine Java-Tabelle JTable Tabelle_A mit Zahlen gefüllt. Einige Zahlen sind editierbar, andere nicht (DefaultTableModel). Jetzt sei die Zahl x Ergebnis einer Funktion von anderen, im Hintergrund befindlichen Zahlen, etwa die Summe von 20 Zahlen. Nun möchte ich, daß beim Anfassen (Doppelklicken) auf die Zahl x das folgende passiert: Es öffnet sich in einem separaten Fenster eine neue Tabelle Tabelle_B, welche die 20 Zahlen anzeigt, deren Summe gerade x ist. Durch Verändern einer oder mehrerer dieser 20 Zahlen ändert sich auch x, und beim Schließen der 20-Zahlen-TabelleTabelle_B sieht man dann das neue Ergebnis x in der Tabelle Tabelle_A.

Realisiert habe ich das schon mit einem separaten Button und ActionListener in Tabelle_A, welcher beim Anklicken Tabelle_B öffnet, welche dann einen Button "Übernehmen" beherbergt, der mir das geänderte Berechnungsergebnis in die Zelle x von Tabelle_A schreibt.

Geht so etwas auch durch direktes Anklicken von x in Tabelle_A? Wahrscheinlich schwierig, einerseits soll diese Zelle einen "normalen" Wert anzeigen, andererseits soll darunter ein ActionListener liegen. Hhmmm.

Vielleicht hat ja jemand eine Weihnachtsüberraschung für mich. Im Moment brauche ich dazu wohl nur eine Idee, noch (?) keinen Code.

Vielen Dank!
hippokeng
 

Technipion

Erfahrenes Mitglied
Hi,
ich habe mir gerade die Dokumentation von JTable angeschaut, und dort gibt es einen Link zu einem kurzen Tutorial wie man die Klasse richtig benutzt. In besagtem Tutorial gibt es einen Abschnitt, wo eigene "Editoren" für Zellen erstellt werden können. Im Beispiel wird ein Zelltyp für eine Farbauswahl gebastelt. Wenn der Benutzer die Farbzelle anklickt, wird ein separates Fenster mit einer Auswahlpalette geöffnet.
Das müsste prinzipiell recht einfach für deinen Anwendungsfall anpassbar sein.

Gruß Technipion
 

hippokeng

Grünschnabel
. . . As DefaultCellEditor does not support other types of components, you must do a little more work . . .
War mir irgendwie klar, daß es nicht so gaaanz trivial ist. Aber der code steht ja dabei, und nach einem Diagonallesen scheint mir das meinen Fall zu lösen, werde ich mal sehen.
Auf jeden Fall herzlichen Dank für Deine Mühen, Technipion.

Gruß, hippokeng.
 

Technipion

Erfahrenes Mitglied
Super!

Aber du weißt: Wenn du auf Schwierigkeiten stößt, kannst du uns jederzeit deinen Code zeigen und wir helfen gerne weiter :)