JavaFX Löschen im Tabelview macht Problem

Joob

Top Contributor
Ich habe ein Tableview mit einem Buttom.

Die Daten sind in einer Observable List gespeichert. In Beans.

Wenn ich nun auf Löschen klicke wird der Datensatz geprüft ob er gesperrt ist und ggf. gelöscht.
Danach wird das Tableview neu angezeigt und zwar ohne den gelöschten Datensatz.

Wenn ich nun aber direkt nacheinander zwei Datensätze anklicke,
zb. zwei die direkt untereinander liegen.

Dann wird der erste korrekt gelöscht,
offensichtlich merkt sich javafx aber den zweiten Klick und führt ihn danach aus.
Da aber das Tableview bis dahin bereits aktualisiert ist, wird nun ein Datensatz unter den beiden gelöscht.

Das ist nachvollziehbar aber nicht korrekt.
Wie kann ich das zweite und weiter Klickevents löschen bis die erste Löschaktion beendet ist.

Das Problem ist das das Tabelview ja nichts davon weiß was im Beans abläuft.
Ich habe aber Zugriff auf den Controller in dem das Tabelview deklariert ist.

ggf. wäre es eine Lösung nach der ersten Löschaktion im Beans erst einmal dort alle noch ausstehenden Klicks im Controller des Tableviews zu löschen.
Ich weiß aber nicht wie.
 

Joob

Top Contributor
Ich versuche es noch mal.

Offensichtlich merkt sich das TableView welche Position in der Observallist angeklickt wurde und arbeitet diese nach und nach ab.
Wenn man löscht muss man aber dem Benutzer die geänderte Anzeige zeigen.
Also baut man die Observal neu auf.

Das interessiert aber das TableView nicht und er nimmt nun die gemerkte Position. zb. 9
Diese ist falsch weil um eins verschoben. (in der Position befindet sich nun ein anderes Bean, welches nun gelöscht wird.)

Was ich gerne tun würde, ist das:
Herausfinden ob noch gemerkte Positionen vorliegen und erst dann die Liste aktualisieren wenn keine mehr vorliegen.

Ich weiß nur nicht wie ich das herausfinden kann.
Bitte um Hilfe.
 

Joob

Top Contributor
Nein .
Ich hatte das schon in Erwägung gezogen aber es erschien mir nicht wirklich hilfreich. (Abfrage task running ..)

Ich zeige dir mal das Fenster und die Konsolenausgabe.
Also das Problem ist wenn ich zweimal schnell auf die Mülleimer von zwei Vokablen klicke.

Grundsätzlich läuft das bei einem Mal. Aber ich muss dann ja auch das geänderte Ergebnis anzeigen.
Das geht nur wenn ich die ObservalList aktualisiere und dann kommt es zu dem Problem.

1591994110879.png

So und jetzt mal die Konsolenausgabe:
id to del bean : 8697- BL : Arme
Delete : 8697
No File deleted.
No File deleted.
filtv
id to del bean : 9165- BL : Aufruf
Delete : 9165
No File deleted.
No File deleted.
filtv

Ich hatte "Arme" und "auch" angeklickt.
Man kann dann sehen er löscht Arme,
aktualisiert die Ansicht
und löscht dann Aufruf, welches ja nach der Aktualisierung die Position von auch in der ObservalList eingenommen hat.

Mir fiel dazu nur ein, das ich herausfinden müsste ob das Tabelview dahingehend noch etwas in der Liste hat
und die Aktualisierung nur dann auszuführen wenn diese leer ist.

Ist das verständlich dargestellt ?
 

mihe7

Top Contributor
Also das Problem ist wenn ich zweimal schnell auf die Mülleimer von zwei Vokablen klicke.
OK, das ergibt Sinn. Du klickst an zwei verschiedene Positionen, nach dem ersten Klick ist das Programm beschäftigt, aktualisiert die Tabelle und dann wird der Klick für die zweite Position verarbeitet. Da sich die Daten zwischenzeitlich geändert haben, steht an dieser Position natürlich ein anderer Satz. Das Problem verschäft sich, je länger die Arbeit dauert, die von einem Klick ausgelöst wird.

Andersrum: wenn Du mehrfach in die gleiche Zeile klickst, dann dürften die Sätze nacheinander gelöscht werden.

Finde ich persönlich jetzt nicht störend. Aber generell würde es sich empfehlen, die Arbeit in einen Thread auszulagern. Sollte das immer noch nicht reichen, dürftest Du halt in einem bestimmten Zeitraum nur einen Klick zulassen. Das hat für mich aber eher was von einem Hack.

Villeicht hat @dzim eine Idee...
 

LimDul

Top Contributor
So aus dem Bauch heraus - anstelle mit einem ClickListener eventuell mit einem Button arbeiten, der in der Zeile angezeigt wird? Der Button sollte das zu löschende Element kennen und dann geht es evtl.
 

Joob

Top Contributor
OK, das ergibt Sinn. Du klickst an zwei verschiedene Positionen, nach dem ersten Klick ist das Programm beschäftigt, aktualisiert die Tabelle und dann wird der Klick für die zweite Position verarbeitet. Da sich die Daten zwischenzeitlich geändert haben, steht an dieser Position natürlich ein anderer Satz. Das Problem verschäft sich, je länger die Arbeit dauert, die von einem Klick ausgelöst wird.

Andersrum: wenn Du mehrfach in die gleiche Zeile klickst, dann dürften die Sätze nacheinander gelöscht werden.

Finde ich persönlich jetzt nicht störend. Aber generell würde es sich empfehlen, die Arbeit in einen Thread auszulagern. Sollte das immer noch nicht reichen, dürftest Du halt in einem bestimmten Zeitraum nur einen Klick zulassen. Das hat für mich aber eher was von einem Hack.

Villeicht hat @dzim eine Idee...
Das mit dem Thread würde keinen Unterschied machen, denn der wird erst ausgelöst wenn der syncrone Teil fertig ist.
Ich habe auch schon hin und her überlegt.

Aber egal wie man es wendet, eine wirklich sichere Methode wäre es diese Liste im Tabelview nach der die Klicks abgearbeitet werden zu löschen.
Ich habe auch schon ganz grobe Sachen probiert, indem ich das Tableview vor Verarbeitung gesperrt habe.
Aber darauf reagiert es nicht.
Der springende Punkt ist es das der Button im Bean definiert ist. Das Tabelview aber die Position der ObservalList vermerkt, würde das Tabelview einen Verweis auf das Beanobjekt vermerken wäre das Problem nicht da.
 

Joob

Top Contributor
Zum Thread,
schau mal wie das abgearbeitet wird, in der Konsolenausgabe. Der Thread würde zwar asyncron laufen, aber erst später gestartet so das das keinen Unterschied machen würde.
 

mihe7

Top Contributor
Bei einem Klick ermittelst Du das zu löschende Objekt, startest einen Thread und kehrst sofort zurück. Dann kann der zweite Klick sofort verarbeitet werden, so dass das richtige Objekt ermittelt werden kann.
 

dzim

Top Contributor
Sorry, bin erst jetzt wieder dazu gekommen zu lesen. So ganz bin ich auch nicht durchgestiegen, was eigentlich hier so lange dauert. Muss wohl erst noch lesen/verstehen, worum es überhaupt geht... 🤣

Aber etwas Asynchron zu tun, macht für mich absolut Sinn! Ich würde halt in der Zeit, bis die ominöse Aktion fertig ist, irgendwie verhindern, dass der User Unsinn machen kann. Entweder ein Overlay mit einem Spinner über die Tabelle legen, oder diese auf disabled schalten, oder alle Löschen-Buttons disablen.

Mich würde auch interessieren, was hier synchron passiert, denn häufig ist es ja nicht gut, wenn man etwas länger dauerndes auf dem UI-Thread macht. Denn im schlimmsten Fall wirkt die Applikation dadurch träge und produziert die berüchtigtes "diese Anwendung reagiert nicht"-Meldung.

Aber ich sehe ja, du hast einen kreativen Weg drum herum gebaut. Nun ja. Dann war es wohl doch etwas sinnlos, dass ich überhaupt schreibe... 🤷‍♂️
 

Joob

Top Contributor
Trotzdem schönen Dank.
Ich war halt ziemlich frustriert.
Momentan muss ich mich um was anderes kümmern, aber ich denke das schau ich mir später noch mal an.

Schönen Dank.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
W Element aus comboBox mit observableList löschen AWT, Swing, JavaFX & SWT 3
ExceptionOfExpectation Mit einer laufenden GUI Applikation eine Datei in dem Rechner löschen AWT, Swing, JavaFX & SWT 2
Fragerjava Frame inhalt komplett löschen AWT, Swing, JavaFX & SWT 4
missy72 JavaFX CellFactory deaktivieren, oder löschen AWT, Swing, JavaFX & SWT 2
N JavaFX Tableview nach Löschen von Element falscher Index AWT, Swing, JavaFX & SWT 4
C Swing Component bei Doppelklick löschen AWT, Swing, JavaFX & SWT 4
H JTabel Inhalt löschen AWT, Swing, JavaFX & SWT 1
R Swing Ein gezeichneten String aus dem JFrame löschen AWT, Swing, JavaFX & SWT 5
F AWT awt KeyEvent - Zeichen direkt nach Eingabe löschen AWT, Swing, JavaFX & SWT 2
B JavaFX RadioButtons aus ToggleGroup löschen AWT, Swing, JavaFX & SWT 7
I GEmaltes BufferedImage löschen AWT, Swing, JavaFX & SWT 3
M JavaFX Altes Fenster (FXML Datei) löschen AWT, Swing, JavaFX & SWT 16
T Swing JTable valueChanged datensatz löschen AWT, Swing, JavaFX & SWT 1
J Panel auf Frame löschen und neues Panel Hinzufügen AWT, Swing, JavaFX & SWT 4
L Komplettes Löschen SWT vom System AWT, Swing, JavaFX & SWT 6
D JavaFX observablelist löschen AWT, Swing, JavaFX & SWT 3
H Swing Waypoints in JXMapKit löschen AWT, Swing, JavaFX & SWT 1
LexeB4F JTable mehrere Zelle selektieren und inhalte Löschen.. Ideen gesucht AWT, Swing, JavaFX & SWT 1
thobren JavaFX Ecken bei radius löschen AWT, Swing, JavaFX & SWT 2
C Swing JTextField Funktion zuweisen - Löschen von Buchstaben/Sonderzeichen AWT, Swing, JavaFX & SWT 6
G JPanel komponente Löschen AWT, Swing, JavaFX & SWT 7
A JFace Wizard: Ist es möglich eine Page zu löschen? AWT, Swing, JavaFX & SWT 2
J Text bei Eingabe löschen AWT, Swing, JavaFX & SWT 5
M Zeichnen ohne vorherige Linien zu löschen AWT, Swing, JavaFX & SWT 2
I Objekte aus contentPane löschen funktioniert nicht AWT, Swing, JavaFX & SWT 3
X AWT Text der mit Graphics "drawString(...)" geschreiben wurde wieder löschen. AWT, Swing, JavaFX & SWT 6
llabusch Prüfen ob JMenu leer ist & löschen AWT, Swing, JavaFX & SWT 1
N AWT Markierte Zeile jList aus mySQL DB löschen AWT, Swing, JavaFX & SWT 2
TheJavaKid JTextField: Reine Domain herausfiltern, sonst Inhalt löschen AWT, Swing, JavaFX & SWT 1
M JTable horizontale scrollbar löschen AWT, Swing, JavaFX & SWT 3
Bluedaishi JTable alle Zeilen löschen AWT, Swing, JavaFX & SWT 7
I ausgewählte Zeile mit Hilfe der Tastatur löschen! AWT, Swing, JavaFX & SWT 3
I JTable Inhalte löschen ohne den JTable zu verändern! AWT, Swing, JavaFX & SWT 5
I 2D-Grafik Shape aus BufferedImage "löschen" AWT, Swing, JavaFX & SWT 2
J Einträge aus Table löschen ohne Exception AWT, Swing, JavaFX & SWT 6
A 2D-Grafik Panel inhalt löschen AWT, Swing, JavaFX & SWT 5
H JCombobox inhalt löschen AWT, Swing, JavaFX & SWT 17
earlgrey_tea JTable Zelleninhalt beim Editieren löschen AWT, Swing, JavaFX & SWT 5
Kenan89 removeAll, um alles in einem JPanel zu löschen AWT, Swing, JavaFX & SWT 10
P Listenelemente über Checkbox löschen AWT, Swing, JavaFX & SWT 6
Ollek Swing JTable - Zeile löschen mit AbstractTableModel AWT, Swing, JavaFX & SWT 20
S Swing JTable Zeilen löschen AWT, Swing, JavaFX & SWT 21
4 AWT bestimmte Objekte zeichnen und löschen AWT, Swing, JavaFX & SWT 8
A JTable Zelle markieren von bis und Löschen AWT, Swing, JavaFX & SWT 6
S Swing AWT-Exception bei JTable mit JComboBox beim Löschen der letzten Zeile AWT, Swing, JavaFX & SWT 3
C JFrame - Löschen und neu füllen AWT, Swing, JavaFX & SWT 9
E Swing JTable Inhalte löschen..Was ist Sinnvoll? AWT, Swing, JavaFX & SWT 5
L Inhalt einer table löschen AWT, Swing, JavaFX & SWT 2
H Markierte Zeile löschen AbstractTableModel AWT, Swing, JavaFX & SWT 10
M [erledigt] Bestimmte Zeile aus JTextArea löschen AWT, Swing, JavaFX & SWT 3
F Swing JTable: Problem beim zeile löschen AWT, Swing, JavaFX & SWT 3
M Swing jList Auswahl löschen AWT, Swing, JavaFX & SWT 2
Semox Swing Kreis löschen durch Mausklick in der Nähe AWT, Swing, JavaFX & SWT 2
B Swing JList Daten löschen AWT, Swing, JavaFX & SWT 13
Pithecanthropus Swing Vordefinierten KeyStroke löschen AWT, Swing, JavaFX & SWT 3
S Java3D: Alle Objekte in BranchGroup löschen während Laufzeit AWT, Swing, JavaFX & SWT 3
J ArrayList Datensätze komplett löschen AWT, Swing, JavaFX & SWT 8
L ArrayList Wert löschen klappt nicht AWT, Swing, JavaFX & SWT 11
A Tabellen Spalte löschen AWT, Swing, JavaFX & SWT 6
S Comobox löschen AWT, Swing, JavaFX & SWT 10
U LayoutManager [GBL] Component aus einer Zelle löschen AWT, Swing, JavaFX & SWT 2
R JTable Zeile löschen AWT, Swing, JavaFX & SWT 4
B Fadenkreuze löschen und nicht "verstecken" AWT, Swing, JavaFX & SWT 10
X Keyevents nach Beartbeitung löschen AWT, Swing, JavaFX & SWT 2
E Spalte in JTable löschen AWT, Swing, JavaFX & SWT 4
hdi Swing JTable: Löschen vom Daten im Model AWT, Swing, JavaFX & SWT 7
Z JTextField Text löschen AWT, Swing, JavaFX & SWT 1
D eigenes Tablemodel, Zeile löschen ArrayindexOOB excp AWT, Swing, JavaFX & SWT 4
Junker Fensterinhalt vor ausführen von repaint komplett löschen. AWT, Swing, JavaFX & SWT 2
A Swing JTree Tree Node löschen AWT, Swing, JavaFX & SWT 2
E Graphics2D: altes Objekt löschen, wenn repaint aufgerufen wird AWT, Swing, JavaFX & SWT 7
M JTexField löschen AWT, Swing, JavaFX & SWT 3
Meldanor JTables - Zeilen hinzufügen/löschen AWT, Swing, JavaFX & SWT 4
M brauche Hilfe um Einträge aus Jlist zu löschen AWT, Swing, JavaFX & SWT 4
Q markierte mails löschen AWT, Swing, JavaFX & SWT 5
C Spalte aus JTable löschen AWT, Swing, JavaFX & SWT 8
nadal15 JTable und ArrayList - selected rows löschen AWT, Swing, JavaFX & SWT 6
F Per KeyListener Zeilen aus JTable löschen AWT, Swing, JavaFX & SWT 9
S Spur löschen. AWT, Swing, JavaFX & SWT 5
A Element aus einer JList löschen AWT, Swing, JavaFX & SWT 5
P [JTree] Icon für Nodes und Leafs ändern bzw. löschen AWT, Swing, JavaFX & SWT 2
hdi super.paintComponent(g); soll nicht alles löschen AWT, Swing, JavaFX & SWT 2
O Fensterinhalt löschen und neu generieren AWT, Swing, JavaFX & SWT 2
P Canvas Inhalt löschen AWT, Swing, JavaFX & SWT 4
W Node aus JTree löschen AWT, Swing, JavaFX & SWT 2
J JTable - Wie Zeilen löschen ? AWT, Swing, JavaFX & SWT 8
Saxony JTextPane - letzte Zeile löschen AWT, Swing, JavaFX & SWT 4
A Zeile in JTable einfügen/löschen- Tutorial gesucht AWT, Swing, JavaFX & SWT 9
W Elemente aus JPanel bzw. GridBag löschen und ersetzen AWT, Swing, JavaFX & SWT 18
T Per Dialog Textfelder löschen AWT, Swing, JavaFX & SWT 4
T Linien zeichnen und wieder löschen AWT, Swing, JavaFX & SWT 9
H Fileinhalt löschen und SWT Dialog erstellen AWT, Swing, JavaFX & SWT 3
G Features nach Update löschen AWT, Swing, JavaFX & SWT 2
G Canvas löschen AWT, Swing, JavaFX & SWT 15
L Probleme mit Löschen von JPanels AWT, Swing, JavaFX & SWT 2
L Alle Inhalte in BorderLayout.CENTER löschen? AWT, Swing, JavaFX & SWT 2
P JTextArea - einzelne Zeile löschen bzw einfügn AWT, Swing, JavaFX & SWT 2
B Formatierungen eines JTextPane löschen AWT, Swing, JavaFX & SWT 4
D Inhalt einer Canvas löschen (SWT.NO_BACKGROUND gesetzt) AWT, Swing, JavaFX & SWT 3
C Zeile aus Tabelle zur Laufzeit löschen AWT, Swing, JavaFX & SWT 6

Ähnliche Java Themen

Neue Themen


Oben