Swing Tabelle mit Model bei eingeschaltetem Filter synchronisieren

scar

Mitglied
Hallo zusammen,

ich benutze die JTable mit dem RowSorter und der Möglichkeit Filter ein und aus zu schalten, funktioniert auch alles wunderbar, bis auf die Situation, dass ich Probleme habe, wenn sich das Model bei eingeschaltetem Filter ändert.
Das Model (abgeleitet vom DefaultTableModel) wird von einem Server notifiziert, wenn sich dort die Daten ändern. Wenn die gefilterten Einträge nicht betroffen sind ist alles gut. Aber wenn sich z.B. ein Wert ändert, der dann nicht mehr zum Filter passt, fliegt mir die Tabelle um die Ohren.

Bisher bin ich hingegangen und hab mir bei einem Update des Models den Filter und die Selektion der Table gemerkt, den Filter ausgeschaltet das Tableupdate durchgeführt und den Filter dann wieder eingeschaltet und die Selektion soweit wie möglich wieder hergestellt, was je nach Größe der Tabelle nicht sehr schön war, da es ganz schön geflackert hat.

Gibt es hier eine andere Vorgehensweise, die man wählen sollte, wenn man damit rechnen muss, dass sich das Filterergebnis bei einem Modelupdate ändert. Wie synchronisiert man sowas am besten in einem multithreaded Client? Gibt es evtl. extra Listener oder abstrakte Methoden für dieses Problem, die ich leider noch nicht entdeckt habe.

Gruß
Arno
 
S

SlaterB

Gast
hast du ein vollständiges Testprogramm, ohne Server, mit Dummy-Daten, mit Dummy-Änderung automatisch nach x-Sec oder Button,
mit möglichst kurzen Model, z.B. nur eine Spalte, in dem der Fehler reproduzierbar auftritt?

was für ein Fehler überhaupt konkret?

bekannt, dass jede GUI-relevant Datenänderung zur Sicherheit in SwingUtilities.invokeLater() oder vielleicht SwingWorker ausgeführt werden sollte?

das sekundenlange Laden + Vorbereiten der Daten nebenläufig, die ms des Einfügens oder auch nur einfachen Umschaltens/ Austauschens zwischen zwei großen Datenbeständen kontrolliert, damit nicht der AWT Event-Thread mitten in einer Bearbeitung erwischt wird
 

scar

Mitglied
Das mit dem 'invoke later' hab ich schon mal gesehen, aber mir fehlt da der Zusammenhang, könnte aber auch eine Ursache sein, weil ich die Notifications, die vom Server kommen nicht beeinflussen kann und es im Multiuserbetrieb sicherlich Situationen gibt, wo Änderungen reinkommen, während die vorherigen Änderung noch bearbeitet wird.
Was wird den da verzögert aufgerufen und wie sag ich es welchem Listener?

Ein abgespecktes Beispiel ist für mich sehr schwierig zu erstellen, da es nicht so einfach möglich ist den Teil aus einer doch komplexeren Struktur herauszulösen. Übrigens glaube ich, das dann alles funktioniert.

Mir würde es schon helfen, wenn einer kurz skizzieren könnte, wie man mit einer Tabellenänderung in der View normalerweise umgeht, wenn man sich in einer gefilterten Multiselektion befindet.

Wie ich es mache, hab ich ja kurz beschrieben. Evtl. müsste ich die relevanten Methoden noch mit einem 'synchronize' Block versehen.

Also, wenn sich die Tabellendaten geändert haben, bekommt die View auf jeden Fall einen fireTableDataChanged() Event. Wie würde ab da der Code bei euch aussehen?

Bei mir ist es etwa so:
Merke dir die Selektion (eindeutige Spalten in der Tabelle)
Merke dir den Filter
Entferne den Filter
Update die View
Schalte Filter wieder ein
Durchsuche den Filter nach der gemerkten Selektion.

Gruß
Arno
 
S

SlaterB

Gast
> Übrigens glaube ich, das dann alles funktioniert.

> wie man mit einer Tabellenänderung in der View normalerweise umgeht, wenn man sich in einer gefilterten Multiselektion befindet.

genau um das Zweite zu zeigen, aber auch deine Variante zu bewerten, wäre doch ein herausgelöstes Beispiel denkbar,

natürlich kann man auch so auf Beispiele hoffen, und es ist nicht gesagt dass ein Programm von dir garantiert zu Antworten führt,
aber die Möglichkeit bleibt, dass mit einem fertigen Programm, indem man vielleicht nur wenig ändern muss, mehr Reaktion angeregt werden kann als mit mühevollen kompletten Zusammenbau,

da du auf Antwort hoffst, bleibt im Extrem nun mal letzlich bei dir zig Stunden Vorbereitung hängen, für nur noch kurze Antwort jemand anderes,
andere Verhältnisse sind nicht ausgeschlossen, aber unwahrscheinlicher ;)

soweit um das noch einmal zu betonen, musst du nicht weiter kommentieren, ich nerve nicht nochmal damit ;)

--------

Fehlermeldung könnte immer noch schnelle Hinweise bringen

-----

der Server ist vorerst wirklich komplett außen vor zu lassen, der Rest ist schon kompliziert genug um für sich erstmal betrachtet zu werden
(absolute Expertenantwort nicht ausgeschlossen)
 

scar

Mitglied
Hi,

die Sache hat sich mittlerweile erledigt. Die Vorgehensweise war gar nicht das Problem und hat sich im Nachhinein als richtig herausgestellt.
Es war letztendlich eine simple und stillschweigend ignorierte 'Out of Range' Exception die das Problem verursacht hat, weil an dieser Stelle der Model- mit dem Viewindex verwechselt wurde.

Danke für die angebotene Hilfe,
Arno
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
W Kleine Sub-Tabelle in SpreadsheetView-Zelle anzeigen AWT, Swing, JavaFX & SWT 9
K Tabelle zu Datenbank hinzufügen / Apache Derby AWT, Swing, JavaFX & SWT 7
izoards JavaFX editierbare Tabelle AWT, Swing, JavaFX & SWT 4
HoT Sortieren von ein paar Zeilen in einer Tabelle, aber nicht die ganze Tabelle AWT, Swing, JavaFX & SWT 3
H Tabelle in JFrame einfügen AWT, Swing, JavaFX & SWT 1
T Zelle- und die Zeile-Farbenwechsel bei der Selektion in der Tabelle AWT, Swing, JavaFX & SWT 4
T Anbinden der Tabelle an die Daten AWT, Swing, JavaFX & SWT 5
ralfb1105 JavaFX TreeView dynamisch aus Datenbank Tabelle erstellen AWT, Swing, JavaFX & SWT 22
F JavaFX Tabelle mit Daten füllen AWT, Swing, JavaFX & SWT 9
kodela Swing Letzte Änderung in der Tabelle wird nicht gespeichert AWT, Swing, JavaFX & SWT 5
W JavaFX Tabelle zeilenweise mit Werten füllen und an Container anpassen AWT, Swing, JavaFX & SWT 23
F JavaFX Tabelle mit gespeicherten Eingabe Werten AWT, Swing, JavaFX & SWT 8
adiko01 JTable: Nur markierte Zeilen aus der Tabelle in CSV exportiern AWT, Swing, JavaFX & SWT 9
B Zeile einer Tabelle selektieren AWT, Swing, JavaFX & SWT 1
A Swing Tabelle wird bei Betätigung des Button nicht befüllt AWT, Swing, JavaFX & SWT 17
L Dynamischer Aufbau einer Tabelle über Objekte AWT, Swing, JavaFX & SWT 2
B Swing Tabelle(JTable) filtern swing GUI AWT, Swing, JavaFX & SWT 3
D Swing JScrollPane Tabelle ändern (2 Tabellen) AWT, Swing, JavaFX & SWT 7
MrSnake Tabelle nach 2 Strings Filtern AWT, Swing, JavaFX & SWT 3
D Filter in Tabelle Sql AWT, Swing, JavaFX & SWT 6
M JavaFX Tabelle flexibler Länge AWT, Swing, JavaFX & SWT 3
T Swing Tabelle mit Button - Anzeigefehler nach Zeile entfernen AWT, Swing, JavaFX & SWT 1
JavaMachtMichFertig JavaFX Gui - Löschbutton in Tabelle anzeigen, die mittels MySQL Abfrage gefüllt wird AWT, Swing, JavaFX & SWT 5
D Swing Breite einer HTML Tabelle in einer JTextPane AWT, Swing, JavaFX & SWT 6
J JavaFX Tabelle soll ganze Seite ausfüllen AWT, Swing, JavaFX & SWT 2
M ausgewählte Inhalt von ListItem inn ComboBox in der Tabelle speichern AWT, Swing, JavaFX & SWT 0
D Swing Eigene Tabelle AWT, Swing, JavaFX & SWT 18
M Filter in die JFace/SWT Tabelle einbauen AWT, Swing, JavaFX & SWT 5
T SWT Mysql Tabelle zeigt immer nur den ersten Wert immer wieder an AWT, Swing, JavaFX & SWT 3
J JavaFX eine Art Tabelle, jedoch mit mehreren Zeilen AWT, Swing, JavaFX & SWT 2
P Swing Klick in Tabelle nicht möglich AWT, Swing, JavaFX & SWT 0
Thallius Swing Tabelle nach Datumsspalte sortieren AWT, Swing, JavaFX & SWT 4
F JavaFX Daten aus Tabelle in ComboBox AWT, Swing, JavaFX & SWT 9
E Tabelle zeigt nicht neuste Datenbankeinträge an AWT, Swing, JavaFX & SWT 5
F SWT Problem mit Tabelle und Combobox in einem Wizard AWT, Swing, JavaFX & SWT 5
D Swing JTable- Meine Tabelle der Klasse JTable wird nur bedingt angezeigt AWT, Swing, JavaFX & SWT 4
O Tabelle "animiert" Scrollen AWT, Swing, JavaFX & SWT 1
R Int aus JSpinner auslesen und Tabelle erstellen AWT, Swing, JavaFX & SWT 3
G JavaFX ComboBoxTableCell für Zuordnung in Tabelle AWT, Swing, JavaFX & SWT 2
B Probleme bei Sortierung einer Tabelle mit DefaultTableModel AWT, Swing, JavaFX & SWT 6
L Tabelle reagiert ungewollt auf Mausklick AWT, Swing, JavaFX & SWT 6
C Verschiebbare "Buttons" in einer Tabelle AWT, Swing, JavaFX & SWT 3
P Listener Auswahl Tabelle AWT, Swing, JavaFX & SWT 6
B LayoutManager Tabelle repainten AWT, Swing, JavaFX & SWT 4
K Swing JTable Text im Hintergrund einer leeren Tabelle AWT, Swing, JavaFX & SWT 3
H JScrollPane - JEditorPane und HTML-Tabelle AWT, Swing, JavaFX & SWT 2
F Elementbezeichnung in der Tabelle AWT, Swing, JavaFX & SWT 7
F Tabelle sortieren AWT, Swing, JavaFX & SWT 3
F SWT Tabelle Zeile auslesen AWT, Swing, JavaFX & SWT 3
T Spaltennamen jeweils der angezeigten Tabelle anpassen AWT, Swing, JavaFX & SWT 19
S JTable Filter nach Wort oder Wortteil über ganze Tabelle AWT, Swing, JavaFX & SWT 5
L Fehler beim erstellen einer Tabelle mithilfe von 2d-Array AWT, Swing, JavaFX & SWT 3
T Swing JScrollPane- und Tabelle-Header Problem AWT, Swing, JavaFX & SWT 25
B Tabelle anpassen AWT, Swing, JavaFX & SWT 6
N jComboBox mit eigenem Renderer und eigenem Datentyp als Rückgabe in einer Tabelle AWT, Swing, JavaFX & SWT 2
N Button akivieren, wenn Tabelle verändert worden ist AWT, Swing, JavaFX & SWT 2
C SWT refresh einer Tabelle AWT, Swing, JavaFX & SWT 4
X Tabelle während Funktionsaufruf aktualisieren AWT, Swing, JavaFX & SWT 11
C SWT Tabelle mit Werten befüllen AWT, Swing, JavaFX & SWT 5
Y LayoutManager Keine vollständige Darstellung der Tabelle mit GridBagLayout AWT, Swing, JavaFX & SWT 3
S Tabelle sortieren, mit Ausnahme der letzten Zeile AWT, Swing, JavaFX & SWT 9
H SWT RAP Anwendung - Tabelle - Theming AWT, Swing, JavaFX & SWT 3
_dp Swing ScrollPane unterschlägt Großteil der Tabelle AWT, Swing, JavaFX & SWT 7
_dp Swing Tabelle: Ausklappbare Einträge AWT, Swing, JavaFX & SWT 2
C Swing Inhalt einer JTable aktualisieren und filten nach Feldern die nicht in der Tabelle sind AWT, Swing, JavaFX & SWT 3
S Tabelle im selben Formular anzeigen AWT, Swing, JavaFX & SWT 6
D Zwei String Attribute über eine Methode als Zeilen in einer Tabelle darstellen AWT, Swing, JavaFX & SWT 9
M Im Frame wird nur die Menüleiste erstellt und nicht die Tabelle? AWT, Swing, JavaFX & SWT 3
A SWT Tabelle (elegant) sortieren AWT, Swing, JavaFX & SWT 2
D Scrollbar für Tabelle AWT, Swing, JavaFX & SWT 2
A Button in Tabelle ansprechen AWT, Swing, JavaFX & SWT 6
O Tabelle laden - Prozessorlast 100% ?? AWT, Swing, JavaFX & SWT 11
F Tabelle und Bildindex (Thumbnails) AWT, Swing, JavaFX & SWT 4
A SWT Tabelle Sortieren AWT, Swing, JavaFX & SWT 3
H Swing Tabelle nach Klick auf Button mit Daten füllen? AWT, Swing, JavaFX & SWT 2
Airwolf89 Swing Exception beim Füllen einer Tabelle AWT, Swing, JavaFX & SWT 10
D Swing Tabelle sortieren AWT, Swing, JavaFX & SWT 4
B tabelle mit labeln AWT, Swing, JavaFX & SWT 2
M sortierbare Tabelle mit jface und databinding AWT, Swing, JavaFX & SWT 3
H ArrayList?! in Tabelle AWT, Swing, JavaFX & SWT 3
Milady Annzeigen alle Daten aus der Tabelle AWT, Swing, JavaFX & SWT 6
D SWT String aus Textfeld auslesen und in eine Tabelle speichern AWT, Swing, JavaFX & SWT 5
Ollek JTable - Tabelle füllen mit einer ArrayList AWT, Swing, JavaFX & SWT 22
E Daten aus sortierter Tabelle lesen AWT, Swing, JavaFX & SWT 2
T Swing Java Darstellung einer Tabelle AWT, Swing, JavaFX & SWT 3
FoolMoon Swing JCheckBox neben Text in einer Tabelle AWT, Swing, JavaFX & SWT 2
K Strings aus jTextArea in Liste oder Tabelle übertragen- wie? AWT, Swing, JavaFX & SWT 4
H Swing Saubere Erstellung einer Tabelle AWT, Swing, JavaFX & SWT 3
O Tabelle über Event sortieren AWT, Swing, JavaFX & SWT 4
T Invalid Range - Fehler bei TableRowSorter / Tabelle AWT, Swing, JavaFX & SWT 17
S Zeile an eine Tabelle anfügen AWT, Swing, JavaFX & SWT 5
S Datum in Tabelle darstellen? AWT, Swing, JavaFX & SWT 4
R JTable: Tabelle neu darstellen AWT, Swing, JavaFX & SWT 6
M JSplitPane Tabelle neu zeichnen AWT, Swing, JavaFX & SWT 3
G Tabelle eine JList anziegen AWT, Swing, JavaFX & SWT 4
G Tabelle Spalten unsichtbar machen AWT, Swing, JavaFX & SWT 5
P Für den Inhalt einer Zelle (aus Tabelle) STRG-C anwenden AWT, Swing, JavaFX & SWT 2
D Zahlen mit nullen in einer Tabelle anzeigen AWT, Swing, JavaFX & SWT 2
W Probleme beim Erstellen einer Tabelle AWT, Swing, JavaFX & SWT 2
? Tabelle formatieren - auch ohne CellRenderer? AWT, Swing, JavaFX & SWT 6

Ähnliche Java Themen

Neue Themen


Oben