Swing Daten zwischen JTable teilen

ChrisAv

Mitglied
Hallo zusammen,
ich brüte seit mehreren Tagen über ein Problem für welches ich keine Lösung finde.

Kurze Beschreibung des Problems:
Ich habe 2 CustomTableModel (beide vom AbstractTableModel abgeleitet), welche für JTable herhalten. Der JTable mit TableModel1 enthält Informationen zu Farben, der JTable des TableModel2 enthält Daten, die weiterverwendet werden. Beide Table werden in eigenen JPanel dargestellt.
Ich möchte erreichen, die Bezeichnung der Farbe (als Spalte dargestellt) aus JTable1 in einem Dropdownmenü einer Spalte im JTable2 zu nutzen.

Mein Weg bisher ist folgender:
Ich habe die Farbinformationen als Classvariable deklariert, um ohne Erzeugung einer Instance auf sie zugreifen zu können.
Java:
public class TableModel 1 extends AbstractTableModel {
	public static ArrayList<CustomType> colorInformation = new ArrayList<CustomType>();
}
Im TableModel2 greife ich bei der Formatierung der Spalte mit einem Dropdown (über eine JComboBox) auf die oben genannte Classvariable zu.
Java:
public class TableModel2 extends AbstractTableModel {
    private ArrayList<CustomType> colorList = new ArrayList<CustomType>();
	public void setUpColorColumn(TableColumn colorColumn){
        JComboBox comboBox = new JComboBox();
        colorList = TableModel1.colorInformation

        for (int i = 0; i < colorList.size(); i++){
            comboBox.addItem(colorList.get(i).getID());
        }
}

Mein Problem ist nun, dass die Daten im Dropdown des TableModel2 zwar dargestellt werden, sie jedoch bei einer Änderung der Daten in Table1 nicht aktualisiert werden.

Die einzige mir einfallende Lösung nutzt eine synchronized ArrayList. Da ich mich bisher jedoch noch nicht mit der Verwendung von Threads auseinander gesetzt habe, scheue ich eine „try-and-error“ Methode zu implementieren.

Habt ihr eine Idee, wie ich dieses Problem lösen kann?
 

Foermchen82

Top Contributor
erstmal Prinzipiell:

Wenn Objekt B auf Änderungen von Objekt A reagieren soll, dann muss entweder B sich mit einem Listener an A registrieren, oder A muss B aktualisieren.

Nun zu deinem Problem. So wie ich das verstanden habe, wird die Color-ComboBox in deinem Model erzeugt. Richtig? Das ist ein unschöner Ansatz, da du damit dein Datenmodell mit der Darstellung mischst und somit das MVC-Pattern verletzt.

Richtig wäre folgendes: Du hast ein Datenobjekt "CustomColor". Dies enthält den Name, die Farbinformation und eine ID. Wie du schon hast, wird es über die Tabelle 1 dargestellt und bearbeitet.

In Tabelle 2 enthält ein zweites Datenobjekt. Dies enthält unter anderem als Variable eine Farb-ID. Soweit so gut.
Nun willst du ja nicht die ID anzeigen, sondern via Drop-Down-Box eine Farbe auswählen.
Hierzu erstellst du dir eine ComboBox mit deinen CustomColor-Objekten. Diese Fügst du als Table-Cell-Renderer der Tabelle an der entsprechenden Spalte hinzu.

Um nun auf Änderungen in der Tabelle 1 zu reagieren, musst du nur die ComboBox per Listener an Tabelle 1 registrieren. Jedesmal wenn sich etwas ändert, würde ich dann die ComboBox neu befüllen oder (besser sogar) nur das entsprechende Element austauschen.

So, ich hoffe ich hab das verständlich genug ausgedrückt! *g*
 

Michael...

Top Contributor
Wenn beide JTables auf mehr oder weniger dieselbe Information zugreifen müssen, warum nicht ein gemeinsames TableModel verwenden?

Was ich auch noch merkwürdig finde: Was hat eine JComboBox in eimem TableModel verloren?
 

Foermchen82

Top Contributor
Wenn beide JTables auf mehr oder weniger dieselbe Information zugreifen müssen, warum nicht ein gemeinsames TableModel verwenden?

Was ich auch noch merkwürdig finde: Was hat eine JComboBox in eimem TableModel verloren?

scheinbar will er in der einen Table sich ein komplexes Color-Objekt schaffen wo er u.a. einen Namen vergeben kann. Den will er dann in der Combo anzeigen. Ist soweit ja ganz OK. Aber die ComboBox im Model find ich wie schon gesagt etwas "ungelungen" *g*
 

ChrisAv

Mitglied
Wenn Objekt B auf Änderungen von Objekt A reagieren soll, dann muss entweder B sich mit einem Listener an A registrieren, oder A muss B aktualisieren.

Es fällt mir wie Schuppen von den Augen. Auf die Idee mit dem Listener bin ich nicht gekommen, an anderer Stelle habe ich ihn bereits verwendet. Vielen Dank für den Tipp! Ich versuch mir daran :)

Nun zu deinem Problem. So wie ich das verstanden habe, wird die Color-ComboBox in deinem Model erzeugt. Richtig? Das ist ein unschöner Ansatz, da du damit dein Datenmodell mit der Darstellung mischst und somit das MVC-Pattern verletzt.
Ich habe die ComboBox in das Model gesteckt, um das Model "im Paket" zu erzeugen. Wäre es richtig, den CellRenderer in den JFrame zu schreiben?

Um nun auf Änderungen in der Tabelle 1 zu reagieren, musst du nur die ComboBox per Listener an Tabelle 1 registrieren. Jedesmal wenn sich etwas ändert, würde ich dann die ComboBox neu befüllen oder (besser sogar) nur das entsprechende Element austauschen.
Ich denke ich werde zunächst die gesamte ComboBox neu füllen, dann brauche ich keine Differenzprüfung durchzuführen.

So, ich hoffe ich hab das verständlich genug ausgedrückt! *g*
Auf jeden Fall!

Ich benötige je ein eigenes TableModel, um die speziellen Anforderungen an die Table erfüllen zu können. Speziell hier die Aufbereitung der Daten. Ich könnte natürlich ein "Universalmodel" erstellen, jedoch müsste ich dann pro Table bestimmte Eigenschaften (z.B. Einfärbung der Zeile in Abhängigkeit der rgb-Werte) deaktivieren.
 

Michael...

Top Contributor
Ich könnte natürlich ein "Universalmodel" erstellen, jedoch müsste ich dann pro Table bestimmte Eigenschaften (z.B. Einfärbung der Zeile in Abhängigkeit der rgb-Werte) deaktivieren.
Sowas ist nicht Aufgabe des Models, das Model hält nur die Daten bereit und informiert alle Interessenten über deren Änderungen. Wie die Daten letztendlich dargestellt werden liegt dann in der Hoheit der graphischen Komponenten z.B. einer JTable.
Je komplexer das ganze wird, desto wichtiger ist es die Daten sauber von der Darstellung zu trennen.
 

ChrisAv

Mitglied
Ich möchte euch noch einmal um Hilfe bitten. Ich habe einen TableModelListener an meinen Table1 (Farbinformationen) gehängt . Dieser Listener soll nun die Daten der JComboBox (als Vector) aktualisieren. Jedoch sind die Einträge erst sichtbar, wenn ich einen Eintrag der ComboBox ausgewählt habe. Vorher ist das Dropdown Menü "leer" (keine Einträge sichtbar, jedoch genügend Zeilen vorhanden). Zusätzlich habe ich versucht, die ComboBox nach Aufrufen des Table1 zu füllen. Dies funktioniert jedoch nicht.

Implementierung des TableModelListener:
Java:
        model.addTableModelListener(new TableModelListener() {

            public void tableChanged(TableModelEvent tme) {
                for (int i = 0; i < allColorSymbols.size(); i++){
                    symbolID.add(allColorSymbols.get(i).getID());
                }
                // Aktualisierung der static Methode im Panel des Table2. Eine wahrscheinlich sehr
                // unelegenate Methode.
                NavaidPanel.symbolID = symbolID;
            }
        });

Generell stellt sich mir die Frage, ob der Zugriff auf static Variablen einer Klasse der richtige Weg ist. Ich möchte die Daten der ComboBox aktualisieren, ohne eine Instanz des Tabels mit der ComboBox zu erstellen. Könnt ihr mir einen Denkanstoß geben, wie es besser (eleganter) klappt?
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Millisekunde zwischen 2 Daten Allgemeine Java-Themen 6
N Zeitabstand zwischen 2 Daten(Mehrzahl von Datum) Allgemeine Java-Themen 3
T Anzahl Tage zwischen zwei Daten - Stunde fehlt? Allgemeine Java-Themen 2
MQue Daten-Austausch zwischen Klassen verschiedener Pakete Allgemeine Java-Themen 5
G Daten aus einer For Schleife zwischen speichern Allgemeine Java-Themen 4
I Mehrere Klassen mit den selben Daten Allgemeine Java-Themen 5
padde479 Collections Daten in Dreiecksform Allgemeine Java-Themen 13
V Umgang mit fehlenden Daten in einer Java-Datenanalyseanwendung Allgemeine Java-Themen 5
torresbig Url nach Webseiten-Login auslesen & Daten an Webseite senden Allgemeine Java-Themen 9
A Hartgecodete Daten auslagern Allgemeine Java-Themen 4
F Laden von bestimmten Daten aus TAR Archiv Allgemeine Java-Themen 23
S Webservices für binäre Daten? Allgemeine Java-Themen 5
OnDemand Daten in RAM zwischenspeichern oder lieber aus DB holen? Allgemeine Java-Themen 24
J Daten über serielle Schnittstelle empfangen Allgemeine Java-Themen 4
J JSON Daten von einer Webseite erhalten Allgemeine Java-Themen 2
S Entities aus XML - Daten. Allgemeine Java-Themen 1
M Schnelleres Speichern von XML-Daten über URLConnection Allgemeine Java-Themen 4
kodela Klasse mit "gezipten" Daten Allgemeine Java-Themen 6
M Daten aus MatLab Datei lesen Allgemeine Java-Themen 8
N Daten einer JCoTable in JTextArea anzeigen Allgemeine Java-Themen 7
kodela Klassen Klasse "vergisst" ihre Daten Allgemeine Java-Themen 2
C Daten für Klassifikationsverfahren gewinnen Allgemeine Java-Themen 6
J Daten von Quelltext Allgemeine Java-Themen 5
K OOP Daten addieren sich bei GUI-Eingabe Allgemeine Java-Themen 10
J Jasper Reports - Daten vom Hoster Allgemeine Java-Themen 2
kodela Daten während Laufzeit zugriffsbereit Allgemeine Java-Themen 15
Q Selbständig ActionEvent auslösen zum Daten senden über serielle Schnittstelle Allgemeine Java-Themen 7
J Daten aus Website-Quelltext auslesen Allgemeine Java-Themen 62
R Android Daten online senden Allgemeine Java-Themen 0
P Datenbank-MiniGUI fügt keine Daten ein Allgemeine Java-Themen 4
K Gespeicherte Daten von einer LinkedList auf vier LinkedList verteilen Allgemeine Java-Themen 6
Q-bert Daten von Java Programm speichern Allgemeine Java-Themen 4
K Datei (CSV-ähnlich) in Java einlesen & mit teil der Daten Graphen erstellen Allgemeine Java-Themen 9
A Erste Schritte Daten aus einer Website auslesen Allgemeine Java-Themen 7
OnDemand Desktop-Applikation schreiben, wie daten persistent? Allgemeine Java-Themen 9
S Erste Schritte Fehlender Gedanken-Ansatz bei Interpretation von Daten Allgemeine Java-Themen 1
J Auslesen Daten Java/HTML Allgemeine Java-Themen 15
K Große Mengen an Daten speichern Allgemeine Java-Themen 9
D Daten in MySQL-Datenbank schreiben Allgemeine Java-Themen 13
A Swing FileWriter schreibt keine Daten in Datei Allgemeine Java-Themen 13
M Daten aus anderen Programmen auslesen Allgemeine Java-Themen 2
D Best Practice Login-Daten: Wie am besten abrufen? Allgemeine Java-Themen 6
L Best Practice Log Dateien analysieren und eventuell passende Daten am Chart darstellen Allgemeine Java-Themen 1
J Serial Port Daten empfangen Allgemeine Java-Themen 5
H Daten via COM Schnittstelle erhalten Allgemeine Java-Themen 2
J Daten persistent speichern Allgemeine Java-Themen 14
S Allgemeine parallelisierte Loesung um Daten im Hintergrund zu laden..? Allgemeine Java-Themen 6
L Daten ohne Datenbank richtig abspeichern Allgemeine Java-Themen 5
G Daten aus Website auslesen Allgemeine Java-Themen 7
J Daten aus GUI auslesen und in Objekte umwandeln Allgemeine Java-Themen 6
O Serial Port Daten als Tastaturanschlag senden Allgemeine Java-Themen 0
T Input/Output Daten in eine Datei schreiben Allgemeine Java-Themen 4
Z daten bindung Allgemeine Java-Themen 1
A Datentypen Gregorian Calendar - 2 Daten sind gleich?? Allgemeine Java-Themen 3
L Vergleich-Xml-Daten Allgemeine Java-Themen 3
vandread Daten verschlüsseln mit Java oder Datenbank Allgemeine Java-Themen 15
A Daten in Formularen/Vorlagen erstellen und ausdrucken Allgemeine Java-Themen 3
C HtmlUnit Daten einer Tabelle bekommen ohne, dass diese eine ID aufweist Allgemeine Java-Themen 1
T Daten über port abfangen mit proxy server Allgemeine Java-Themen 12
Todesbote Excel Blattschutz aufheben und Daten einfügen Allgemeine Java-Themen 3
T Mit Apache Poi Daten aus einer Excel Tabelle kopieren und in Word einfügen Allgemeine Java-Themen 1
OnDemand PC identifizieren / Daten auslesen Allgemeine Java-Themen 15
G Combobox füllen mit daten aus einer Tabelle Allgemeine Java-Themen 4
J Maven .war enthält veraltete Daten Allgemeine Java-Themen 3
N Daten aus Jar laden Allgemeine Java-Themen 10
P Datentypen String-Daten zu Byte-Zahlen konvertieren - Komme nicht weiter nach vielem versuchen :-/ Allgemeine Java-Themen 7
K Input/Output Daten speichern / laden Allgemeine Java-Themen 2
M Best Practice: Daten aufnehmen-speichern-bereitstellen Allgemeine Java-Themen 8
T Daten effizient verwalten Allgemeine Java-Themen 4
B JTable eigene Daten Add Methode Allgemeine Java-Themen 2
S OOP Apache Commons Math - Verwendung von Genetics - Wie werden Daten in Chromosomen gespeichert? Allgemeine Java-Themen 4
C Daten über URL an PHP verschicken Allgemeine Java-Themen 4
R Daten aus DB auslesen in ein formular (JSP) Allgemeine Java-Themen 13
S Library fuer Internet-Text-Daten-Quellen..? Allgemeine Java-Themen 8
H OOP Daten über TCP Allgemeine Java-Themen 5
H Input/Output Binäre Daten konvertieren, Output hat Zeilenumbrüche?? Allgemeine Java-Themen 9
D Daten eines User auslesen. Allgemeine Java-Themen 5
B Input/Output Einbinden von Daten in Java Allgemeine Java-Themen 3
L Einbinden von Daten in ausführbare Jar Allgemeine Java-Themen 6
N Methoden Einzelne Daten aus "Person" auslesen Allgemeine Java-Themen 3
R SerialPort auslesen und Daten verarbeiten Allgemeine Java-Themen 23
ARadauer Wo liegen die Daten der Preferences Klasse Allgemeine Java-Themen 3
Madlip Erste Schritte Java speichert Daten im Programm?!? Allgemeine Java-Themen 9
S JDialog Daten ins JFrame übergeben Allgemeine Java-Themen 5
F Threads synchronisierung des Zugriffes auf daten Allgemeine Java-Themen 4
O Amazon S3 Anmelden / Daten downloaden Allgemeine Java-Themen 2
A Daten aufbereiten Allgemeine Java-Themen 11
P Daten kopieren mit nio - Zugriff verweigert Allgemeine Java-Themen 8
L Speichern von Daten in JKS Allgemeine Java-Themen 5
K JFreeCharts - Dummy für fehlende Daten Allgemeine Java-Themen 6
M Daten aus doc, pdf .... auslesen Allgemeine Java-Themen 12
Z Daten von einer Klasse in eine andere übertragen Allgemeine Java-Themen 8
A Login-Daten Formular automatisch ausfüllen Allgemeine Java-Themen 10
C Daten speichern und verwalten Allgemeine Java-Themen 3
Z Daten aus einer Internetseite auslesen? Allgemeine Java-Themen 2
E BlueJ Daten in Textdatei schreiben Allgemeine Java-Themen 21
T Gleichzeitige Zugriffe auf Daten auf dem Server Allgemeine Java-Themen 11
ruutaiokwu META-INF-daten bei ungepackten library-projekten während der entwicklung mit einbeziehen...? Allgemeine Java-Themen 2
K Server Daten Visualisieren Allgemeine Java-Themen 3
F HashMap überschreibt Daten von anderen HashMap Allgemeine Java-Themen 5

Ähnliche Java Themen

Neue Themen


Oben