Klick auf JTable -> EditorPane manipulieren, Fragen zu TableModel

L

limaleet

Gast
Hallo!

Mein Vorhaben ist folgendes:

Ich habe eine ArrayList mit Objekten der Klasse "Person" gefüllt. Diese Objekte haben getter für alle Möglichen Informationen (getName, getAlter, getSchuhgröße) sowie toString(), welche einen String zur Gesamtübersicht dieser Person ausgibt und somit alle verfügbaren Informationen dieser Person liefert.

Kurz gesagt möchte ich..

a) alle Personen aus der ArrayList in einer JTable darstellen
b) Bei Klick auf eine Person in einem Editorpane alle Infos über die Person mit toString() ausgeben lassen.

Jetzt stellen sich mir aber diverse Fragen:

1. Ich denke es ist nicht gut, die konkreten Personenobjekte DIREKT in einem Tablemodel zu speichern - das geht auch garnicht, da die Personenobjekte außerhalb erzeugt und manipuliert werden. Genaugenommen befindet sich die Personen-ArrayList in einem "PersonenManager", welcher Methoden wie addPerson, deletePerson, updatePerson etc. bereitstellt. Der Manager kapselt also alle Personen und kann sie manipulieren.

Wie baue ich aber nun am besten das JTable/TableModel?
Das TableModel will ja auch eine Liste mit den Personen - oder zumindest deren Infos... brauche ich eine neue Klasse "PersonenInfo", mit welcher ich die Infos vom PersonenManager ins Table-Model transferiere oder was schlagt ihr vor?

2. Bei Klick auf eine Person in der JTable soll also in einem EditorPane das toString() dieser angeklickten Person ausgegeben werden. Das ausgeben ist ja nicht viel mehr als editorpane.set(person.toString()) - nur woher weiß ich im EditorPane, welche Person angeklickt wurde? Eine Referenz mitzuliefern wäre evt. ganz praktisch, aber wie erwähnt befindet sich das konkrete Personen-Objekt ja in der ManagerKlasse.

Gut, ich könnte dieser Managerklasse eine Methode getAllInfo(int personxy) geben, aber wie müsste den der Link aussehen zwischen Klick auf JTable und dem Anzeigen?

Das wars fürs erste, vielen Dank!
 

Dragonfire

Bekanntes Mitglied
Irgendwie mus es ja eine Schnittstelle zwischen der Manager-Klasse
und der Tabelle geben.

Das ist das TableModel,
ob jetzt deine Manager-Klasse das TableModel implementiert.
oder eine "PersonInfoTableModel" erstell wird,
welches wieder aus der Managerklasse alles abfragt ...
(Manager-Klasse sollte ja Methoden wie getPerson(XY) haben)
würde für mich keinen Unterschied machen ...

Zum zweiten Problem:
Ich würde einen SelectionListener nehmen.
Kannst nochmal hier schauen:
How to Use Tables (The Java™ Tutorials > Creating a GUI With JFC/Swing > Using Swing Components)
 
L

limaleet

Gast
Danke euch schonmal!

Also dann werde ich wohl Tablemodel in die ManagerKlasse implementieren.
Ich dachte nur, es wäre nicht gut, Logik und GUI zu vermischen. JA ich weiß, dass TableModel nichts mit GUI zu tun hat streng betrachtet, allerdings gehört es ja zu Swing und wenn man Swing austauschen will (in Java eher unwahrscheinlich, aber egal) müsste man ja die Logig verändern. Aber ich werde es wohl so machen.

@André: eine Referenz übergeben... ich bin mir nicht sicher, aber ich sehe dort folgendes Problem: Was passiert, wenn in die Managerklasse ein neuer Datensatz eingetragen wird? 'Wenn das Model tatsächlich eine Referenz hat, so hat das Model ja auch imemr die aktuellste Version der Liste.. aber es muss ja irgendwie merken, dass etwas neu ist in der Liste, oder nicht?


Eine letzte Frage: wie gehe ich vor, wenn ich aus der Liste der Managerklasse gleichzeitig auch noch ein Baum generieren will? Etwa neben TableModle auch noch TreeModel implementieren?

Danke
 

Dragonfire

Bekanntes Mitglied
Für dein "update" Problem gibt es ja extra die "TableModelListener".
Diese Benachrichtigen, z.b. die JTable das sich was geändert hat.

Du musst nur ein "Event" auslösen (hier: TableModelEvent).
 

André Uhres

Top Contributor
'Wenn das Model tatsächlich eine Referenz hat, so hat das Model ja auch immer die aktuellste Version der Liste.. aber es muss ja irgendwie merken, dass etwas neu ist in der Liste, oder nicht?
Richtig. Mach eine entsprechende "ManagerListener" Schnittstelle. Das TableModel implementiert "ManagerListener" und wird beim Manager als Listener registriert. Der Manager benachrichtigt alle registrierten "ManagerListener". Das TableModel benachrichtigt seinerseits die "TableModelListener".

Eine letzte Frage: wie gehe ich vor, wenn ich aus der Liste der Managerklasse gleichzeitig auch noch ein Baum generieren will?
Du gehst so vor wie bei der Tabelle.


Über die Verwaltung der Listener siehe auch: EventListenerList (Java Platform SE 6)
 
Zuletzt bearbeitet:
L

limaleet

Gast
Danke.

Mir fällt da aber gerade folgendes Problem ein:

Die Daten liegen nicht in einer ArrayList wie erst behauptet, sondern ein einem Hashtable. Das ganze hat folgenden Grund: eine Updatemethode fügt der Hashmap öfters neue Items hinzu, und anhand des Keys kann sie entscheiden, ob das Item wirklich neu ist oder ob es doch nicht schon im Hashtable vorhanden ist. Kurz gesagt, um das Hashtable oder irgendeine andere Struktur mit Key komme ich wohl nicht drumherum.

Doch wie verwaltet man ein Hashtable in einem Tablemodel? Vorallem bei getValueAt() wirds hässlich. Schließlich kann man ein Hashtable ja nicht direkt mit einem numerischen Index ansprechen. Auf stackoverflow.com habe ich eine Methode gefunden, welche einen numerischen Index auf einen Key ummappen kann und dann das entsprechende Objekt zurückgibt. Das wird aber erreicht, indem einfach n mal (wobei n = numerischer index) durch die Hashtable durchiteriert wird und dann das Objekt zurückgegeben wird, bei dem gestoppt wird. Performant ist das wohl eher weniger.
 
L

limaleet

Gast
Nachtrag: wer sich unter dem letzten Abschnitt nichts vorstellen kann:

Java:
public Object getValueAt(int rowIndex, int columnIndex) {
                if (columnIndex == 0) {
                        return getKey(rowIndex);
                } else {
                        return m_hash.get(getKey(rowIndex));
                } // if-else

        }

        private String getKey(int a_index) {
                String retval = "";
                Enumeration<String> e = m_hash.keys();
                for (int i = 0; i < a_index + 1; i++) {
                        retval = e.nextElement();
                } // for

                return retval;
        }
 

André Uhres

Top Contributor
Wenn kein Leistungsabfall bemerkbar ist, kannst du's so lassen. Andernfalls könntest du die Keys zusätzlich in einer List speichern, die du dann in getValueAt über den rowIndex ansprechen kannst: [c]String key = keyList.get(rowIndex)[/c]. Das geht natürlich auf Kosten des Speicherplatzes, dafür ist es aber u.U. leistungsfähiger.
HashMap ist übrigens schneller als Hashtable weil Hashtable synchronisiert ist und HashMap nicht.
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
P Swing JTable keine Markierung nach Button klick AWT, Swing, JavaFX & SWT 0
N Swing JTable mit Sorter: Keine Sortierung bei Klick in Header AWT, Swing, JavaFX & SWT 3
C jComboBox in jTable ohne Klick öffnen AWT, Swing, JavaFX & SWT 4
E Zelle in JTable nach klick markieren AWT, Swing, JavaFX & SWT 2
Daniel_L JTable - Links-rechts-Klick ist gleich Doppelklick? AWT, Swing, JavaFX & SWT 2
S JComboBox in JTable wird erst nach klick angezeigt AWT, Swing, JavaFX & SWT 2
GilbertGrape JTable mit Combobox-Editierung schon nach einem Klick AWT, Swing, JavaFX & SWT 7
X JTable "geht" erst beim 2.Klick AWT, Swing, JavaFX & SWT 2
S jTable beim Klick auf Button aktualisieren AWT, Swing, JavaFX & SWT 7
A Zellen in JTable auf Klick kurz markieren auf Klick AWT, Swing, JavaFX & SWT 2
N Jtable und ein Klick darauf! AWT, Swing, JavaFX & SWT 4
V JTable: Bei Klick in Zelle -> Ganze Zeile markeiren AWT, Swing, JavaFX & SWT 7
H Swing Buttons erst nach Klick sichtbar AWT, Swing, JavaFX & SWT 13
S JavaFx Zufallsfarbe beim Button-Klick AWT, Swing, JavaFX & SWT 22
H Swing Auf Klick auf Menü-Eintrag reagieren AWT, Swing, JavaFX & SWT 0
Zrebna Problem bei Eventhandling (Value soll nach jedem erneutem Klick gelöscht werden) AWT, Swing, JavaFX & SWT 4
L Komponenten eines Panels werden erst nach Klick darauf angezeigt AWT, Swing, JavaFX & SWT 13
A Inhalt wechseln bei Klick auf Label AWT, Swing, JavaFX & SWT 8
S Ausgabe aktualisiert sich nur nach 2. Klick AWT, Swing, JavaFX & SWT 17
T Swing Änderung des ActionListener Events nach Klick auf JButton AWT, Swing, JavaFX & SWT 2
Neumi5694 Swing JList - Klick abfangen AWT, Swing, JavaFX & SWT 3
it_is_all JPanel verschwindet nach Button-Klick AWT, Swing, JavaFX & SWT 2
A Nach klick auf Button neuen Inhalt im gleichen Fenster AWT, Swing, JavaFX & SWT 3
A JavaFX Nur ein Klick Button AWT, Swing, JavaFX & SWT 3
J Fensterinhalt bei Klick auf Menüitem wechseln AWT, Swing, JavaFX & SWT 1
stylegangsta JLabel durch Klick auf JButton einblenden AWT, Swing, JavaFX & SWT 16
D Mit Klick auf Button ein neues Fenster erzeugen AWT, Swing, JavaFX & SWT 11
A Zufallsgenerator starten bei Klick auf Radiobutton AWT, Swing, JavaFX & SWT 3
R AWT AWT Textfeld durch Klick auf Button erstellen? AWT, Swing, JavaFX & SWT 3
1 JButton nach Klick ausblenden AWT, Swing, JavaFX & SWT 6
W Bei Button-klick neuen button in array hinzufügen AWT, Swing, JavaFX & SWT 7
P Swing Klick in Tabelle nicht möglich AWT, Swing, JavaFX & SWT 0
C Bei Btn Klick zwei JPanels switchen AWT, Swing, JavaFX & SWT 14
A Swing bei Auswahl und klick eines JComboBox buttons die Klasse eines anderen Projekts aufrufen AWT, Swing, JavaFX & SWT 3
F Swing JTextfield Beispieltext soll nach Klick verschwinden AWT, Swing, JavaFX & SWT 3
T JXTreeTable mit Klick auf TreeNode erweitern AWT, Swing, JavaFX & SWT 12
J Zwei GUIs - Nach button-Klick soll ein Wert an die andere GUI übergeben werden AWT, Swing, JavaFX & SWT 15
J Button soll nach Klick Text ändern und Programm in 3 Sekunden beenden AWT, Swing, JavaFX & SWT 6
H Swing Button Klick soll "Untermenü-Buttons" erzeugen AWT, Swing, JavaFX & SWT 2
T Bei Klick Code ausführen AWT, Swing, JavaFX & SWT 17
S Gif beim Klick nicht unterbrechen AWT, Swing, JavaFX & SWT 3
S Ausschluss bei Klick auf GUI Element AWT, Swing, JavaFX & SWT 6
M JPopupMenu per Klick schließen und gleichzeitig ActionEvent auf JButton? AWT, Swing, JavaFX & SWT 15
Z Bei Klick auf JButton soll ein anderer JButton erscheinen AWT, Swing, JavaFX & SWT 4
D JTree node reagiert bei Klick nicht immer AWT, Swing, JavaFX & SWT 2
D Bei Klick zeichnen AWT, Swing, JavaFX & SWT 13
L Swing Flackern in Frame bei erstem Klick AWT, Swing, JavaFX & SWT 19
Madlip SWT Tree mit einen Klick alles ausklappen AWT, Swing, JavaFX & SWT 3
D JTree nach Klick auf einen Hyperlink aktualisieren AWT, Swing, JavaFX & SWT 3
H Bilder auf Buttons per Klick tauschen ( Puzzle ) AWT, Swing, JavaFX & SWT 8
T Puzzle Klick tausch AWT, Swing, JavaFX & SWT 3
A Swing Herausfinden ob bei JTree Klick auf "+"/"-" anahnd x,y AWT, Swing, JavaFX & SWT 2
S JMenuBar nach 1. Klick deselectieren AWT, Swing, JavaFX & SWT 6
T Demo klick gui erstellen und fenster verlinken AWT, Swing, JavaFX & SWT 5
S JDesktopPane bei Button-Klick anzeigen geht nicht AWT, Swing, JavaFX & SWT 5
multiholle Button bei Klick entfernen AWT, Swing, JavaFX & SWT 3
W Klick in JTextfield AWT, Swing, JavaFX & SWT 6
M animiertes Bild nach Klick auf Button AWT, Swing, JavaFX & SWT 3
H Swing Tabelle nach Klick auf Button mit Daten füllen? AWT, Swing, JavaFX & SWT 2
M JList von Beginn an sortiert nach Spalte ohne Klick? AWT, Swing, JavaFX & SWT 2
T Ordner öffnen nach Klick auf einen Button AWT, Swing, JavaFX & SWT 3
D 1 klick auf button1 und 1 klick auf button2 und passiert was AWT, Swing, JavaFX & SWT 7
X SWT Oberflächenwechsel bei Button-Klick AWT, Swing, JavaFX & SWT 2
S Zeichnen nach button-klick. AWT, Swing, JavaFX & SWT 4
N Herkunft des Fokus erkennbar (via Klick oder Tab-Steuerung)? AWT, Swing, JavaFX & SWT 4
C Aktion durchführen bei Klick auf ein Element im JTree (Untersch. Klick und Doppklick) AWT, Swing, JavaFX & SWT 5
S Swing Bei Klick auf OK Daten übergeben AWT, Swing, JavaFX & SWT 6
F JButton reagiert erst beim 2 klick AWT, Swing, JavaFX & SWT 8
A Swing JTextField - vorausgefüllt bei klick leer AWT, Swing, JavaFX & SWT 54
B Inhalt von JTextField durch Klick auf JButton in JLabel anzeigen lassen AWT, Swing, JavaFX & SWT 8
L JFrame-Verhalten bei Klick auf Schließen-Kreuz ändern AWT, Swing, JavaFX & SWT 3
M Ausgabe nach Klick auf JButton funktioniert nicht. AWT, Swing, JavaFX & SWT 6
R Text löchen bei Klick auf editierbare Combobox AWT, Swing, JavaFX & SWT 4
S Jtree-Icon per Klick auf JBUTTON ändern AWT, Swing, JavaFX & SWT 3
G JList, Deselect per Klick AWT, Swing, JavaFX & SWT 5
A Bei Klick auf disabled JMenuItem JMenu nicht schließen AWT, Swing, JavaFX & SWT 2
A JTree wird erst nach Klick aktualisiert AWT, Swing, JavaFX & SWT 2
G Swing ->mainpanel wechseln bei Klick auf MenuItem (NetB.6 AWT, Swing, JavaFX & SWT 3
G Farbe ändern bei Klick auf einen Kreis AWT, Swing, JavaFX & SWT 5
F Ignoriere Mausklick falls erster Klick von Doppelklick . AWT, Swing, JavaFX & SWT 4
S 1 Klick für JButton und Layout ändert sich AWT, Swing, JavaFX & SWT 14
G Icon auf Button per Klick darauf ändern? AWT, Swing, JavaFX & SWT 9
H JWindow schließen bei einem Klick außerhalb der Anwendung? AWT, Swing, JavaFX & SWT 19
S Neues Panel in JFrame anzeigen durch Button klick AWT, Swing, JavaFX & SWT 2
N Bei Klick auf einen Menüeintrag, soll Tabelle ausgegeben wer AWT, Swing, JavaFX & SWT 4
B JPanel erst durch Button-Klick sichtbar machen AWT, Swing, JavaFX & SWT 8
Z JMenue und bei Klick neuer Inhalt, Problem AWT, Swing, JavaFX & SWT 3
B Anfänger: Panel bei Button Klick anzeigen? AWT, Swing, JavaFX & SWT 4
M Java mit Swing - Elemente erst nach klick sichtbar AWT, Swing, JavaFX & SWT 13
C Komponente mit Focus bevor JButton-Klick merken. AWT, Swing, JavaFX & SWT 6
M neues Frame per klick anzeigen AWT, Swing, JavaFX & SWT 9
I JSlider - klick ignorieren AWT, Swing, JavaFX & SWT 4
S Einfacher Klick aber mouseClicked() zweimal aufgerufen AWT, Swing, JavaFX & SWT 3
R Klick in einem Tree erkennen und auswerten AWT, Swing, JavaFX & SWT 6
G Ein klick auf JPanel abfangen und verarbeiten? AWT, Swing, JavaFX & SWT 3
S Schließen eines Fensters bei Klick auf Button? AWT, Swing, JavaFX & SWT 2
hamburger_jung Mit Button Klick neues Fenster öffnen. AWT, Swing, JavaFX & SWT 1
H Neue Instanz einer Klasse bei JButton-Klick AWT, Swing, JavaFX & SWT 5
M Zusätzlichen Maus-Klick erzeugen AWT, Swing, JavaFX & SWT 4
T Anderes Panel nach Button-Klick laden AWT, Swing, JavaFX & SWT 9

Ähnliche Java Themen

Neue Themen


Oben