Zu schnelle Buttonklicks verhindern?

Status
Nicht offen für weitere Antworten.

Verjigorm

Top Contributor
Hallo,

ich habe da mal eine Frage:

Und zwar habe ich 2 Buttons, die sowohl zu einer JTable eine Zeile hinzufügen bzw. entfernen, sowohl einen neuen Tab in einer TabbedPane hinzufügen bzw. entfernen.

Wenn man den Button zum Entfernen sehr schnell hintereinander drückt, dann gibts in der JTable eine Exception, weil versucht wird, im TableModel eine Zeile zu entfernen, die nichtmehr vorhanden ist, weil sie ja grade entfernt wurde.

Habe also im ActionListener des Buttons als ersten Befehl ein setEnabled(false) für den Button an sich gesetzt.
Das hat das Problem eigentlich auch behoben, aber (man glaubt es nicht) man kann den Button tatsächlich schneller drücken, als das setEnabled greift.

Gut, eine zusätzliche Abfrage beim Entfernen der Tabellenzeile hat das Problem dann ganz gelöst.

Nun bleibt für mich aber letzendlich die Frage:
Ich bin bisher davon ausgegangen, dass der erste Befehl im Actionlistener doch schneller greift, als ein weiterer Buttonklick. Dies scheint aber nicht so zu sein.
Lässt sich das Problem nicht irgendwie anders lösen?
 

musiKk

Top Contributor
Du kannst das Property multiClickThreshold setzen. Das gibt die Zeit in Millisekunden an, in der keine weiteren Klicks gezaehlt werden.
 

lhein

Top Contributor
Also wenn Du Dein Eventhandling korrekt aufgebaut hättest, dann sollte es gar keine Probleme geben.
Wie kann es denn sein, dass Dein TableModel das entfernen der Zeile nicht "schnell genug" mitbekommt?
Wieso ist der Entfernen Button aktiv, wenn gar keine Zeile in der Tabelle selektiert wurde?

Fragen über Fragen...

Gruß
lhein
 

Verjigorm

Top Contributor
lhein hat gesagt.:
Also wenn Du Dein Eventhandling korrekt aufgebaut hättest, dann sollte es gar keine Probleme geben.
Wie kann es denn sein, dass Dein TableModel das entfernen der Zeile nicht "schnell genug" mitbekommt?
Wieso ist der Entfernen Button aktiv, wenn gar keine Zeile in der Tabelle selektiert wurde?

Fragen über Fragen...

Gruß
lhein

weil bei jedem Klick die letzte row aus der Tabelle entfernt wird und nicht die grad selektierte

das mit dem multiClickThreshold hört sich gut an, werd ich mal schauen.
 

lhein

Top Contributor
Dann würde ich mal sagen, dass Dein Action Code hier unzureichend ist. Wenn keine Zeile mehr da ist, kann auch keine mehr gelöscht werden. Sowas gehört grundsätzlich mal abgefangen bzw. der Enabled-State Deines Buttons sollte als Bedingung haben, dass mind. 1 Row übrig ist.
 

Ark

Top Contributor
Ich würde einfach den Button lahmlegen (enabled=false), bis die Aktion abgeschlossen ist. Das Lahmlegen muss natürlich noch im EDT geschehen, um dem Synchronisationsproblem zu entgehen.

Ark
 

byte

Top Contributor
Ark hat gesagt.:
Ich würde einfach den Button lahmlegen (enabled=false), bis die Aktion abgeschlossen ist. Das Lahmlegen muss natürlich noch im EDT geschehen, um dem Synchronisationsproblem zu entgehen.

Hat er doch gemacht und das ist doch grade das Problem. ???:L


multiClickThreshold sollte das Problem beheben. Falls nicht, kannst Du Dir auch einen DelayedButton bauen, der beim Klick zunächst einen Timer startet und bei einem erneuten Klick der Timer wieder neu beginnt. Erst nach Ablauf des Timers wird dann die eigentliche Action getriggert.
Ich benutze sowas für Textfelder, um Eingaben on-thy-fly zu verarbeiten, ohne dass der Benutzer einen Button drücken muss.
 

Ark

Top Contributor
byto hat gesagt.:
Ark hat gesagt.:
Ich würde einfach den Button lahmlegen (enabled=false), bis die Aktion abgeschlossen ist. Das Lahmlegen muss natürlich noch im EDT geschehen, um dem Synchronisationsproblem zu entgehen.

Hat er doch gemacht und das ist doch grade das Problem. ???:L
Oh, stimmt. Das habe ich dann wohl überlesen.

Trotzdem möchte ich zu gerne den Quelltext sehen, weil ich das genauso wie Verjigorm nicht glauben kann (also dass das nicht funktionieren sollte).

Ark
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Schach schnelle Zuggenerierung Allgemeine Java-Themen 3
I Methoden Schnelle Hilfe benötigt - Kleines Video/Slideshow aus mehreren Bildern erstellen Allgemeine Java-Themen 3
T "Platzsparende" und "schnelle" Indizes erzeugen Allgemeine Java-Themen 10
L schnelle Listendurchsuche Allgemeine Java-Themen 16
ruutaiokwu schnelle datenstruktur... Allgemeine Java-Themen 13
M Schnelle Scriptsprache für einfache Funktionen? Allgemeine Java-Themen 5
A brauche schnelle antwort wg. schleife! Allgemeine Java-Themen 3
B Per Buttonklicks einer Liste Wörter hinzufügen - Wie umsetzen? Allgemeine Java-Themen 11
D Stackoverflow verhindern Allgemeine Java-Themen 4
T Fenster schließen verhindern Allgemeine Java-Themen 13
Z Überlauf des Javaspeichers verhindern Allgemeine Java-Themen 4
N Input/Output Verhindern, dass log-Einträge auf Console erscheinen Allgemeine Java-Themen 2
V JNI Call Crash verhindern (abfangen) Allgemeine Java-Themen 2
nrg Decompile verhindern Allgemeine Java-Themen 2
K HashMap sorting verhindern Allgemeine Java-Themen 10
H Mehrfachen Start des Programms verhindern Allgemeine Java-Themen 6
B Java OutOfMemory Error verhindern, Resourcenbedarf präventiv abschätzen? Allgemeine Java-Themen 19
T doppeltes Starten verhindern Allgemeine Java-Themen 14
B Exception bei leerem JTable verhindern Allgemeine Java-Themen 10
P Mehrere Instanzen der selben Appl. verhindern Allgemeine Java-Themen 12
J Wie die gleichzeitige Ausführung mehrerer Tasks trotz Multithreading verhindern? Allgemeine Java-Themen 2
T Mehrmaligen Start verhindern Allgemeine Java-Themen 19
Daniel_L Mehrfache Ausführung desselben Threads/Tasks verhindern? Allgemeine Java-Themen 4
Schandro StackOverflowError bei Rekursion verhindern Allgemeine Java-Themen 14
K Zeilenumbruch in Eclipse beim Codeformater verhindern Allgemeine Java-Themen 10
C Flimmern wegen eines Thread verhindern Allgemeine Java-Themen 8
M Acrobat Viewer Bean - EULA-Anzeige verhindern Allgemeine Java-Themen 4
G KeyListener: Wiederholtes Aufrufen von KeyPressed verhindern Allgemeine Java-Themen 3
reibi Doppelten Programmaufruf verhindern Allgemeine Java-Themen 11
S Verhindern das Programm mehrmals geöffnet wird Allgemeine Java-Themen 26
G Wie das Beenden eines Javaprogrammes verhindern? Allgemeine Java-Themen 6
F [TableModel] Doppelte einträge finden (bzw. verhindern) Allgemeine Java-Themen 3
P Mehrere Instanzen beim IE verhindern Allgemeine Java-Themen 11
thE_29 Escape Zeichen verhindern Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben