Doppelklick von Einzelklick unterscheiden, aber richtig ...

propra

Aktives Mitglied
Hallo zusammen,

um einen Doppelklick von einem Einzelklick zu unterscheiden, frage ich im Moment mit Hilfe der Methode
Code:
getClickCount()
die Anzahl der Klicks ab. Funktioniert auch soweit.
Das Problem was ich allerdings habe, ist das ich dadurch auch automatisch einen Einzelklick ausführe.
Java:
@Override
public void mousePressed(MouseEvent arg0) {

	if (arg0.getClickCount() == 2) {
		System.out.println("Doppelklick");
	}
			
	if (arg0.getClickCount() == 1) {
		System.out.println("Einzelklick");
	}
}

Der Code oben führt zur Ausgabe:
Einzelklick
Doppelklick

Gibt es einen Möglichkeit, dass nur der Block des Doppelklicks ausgeführt wird?
 

Gossi

Bekanntes Mitglied
Sehr umständlich, aber das einzige was mir einfallen würde wäre nen Thread , aber da würde der Einzelklick zeiemlich verzögert ausgeführt werden....
 

propra

Aktives Mitglied
Danke für die Antworten.

Ich würde es der Einfachheit halber lieber erst einmal ohne zusätzlichen Thread probieren.
Vielleicht sollte ich etwas mehr auf das Szenario eingehen.
Wie einige vielleicht aus anderen Threads mitbekommen haben, möchte ich auf einer Zeichenfläche (erbt von JPanel) Kreise und Rechtecke zeichnen.
Ich stelle es mir so vor, dass der Nutzer in der Menuleiste den entsprechenden Punkt auswählt. Dadurch wird eine Variable Zeichenmodus gesetzt und mit dem nächsten (Einzel-)Klick in die Zeichenfläche das entsprechende Symbol hinzugefügt.
Nun sollen die Symbole im Nachhinein noch verschiebbar sein. Bisher wollte ich es so lösen, dass mit einem Doppelklick ein Symbol ausgewählt werden kann. Das ausgewählte Symbol soll dann verschoben werden. Aber irgendwie ist das nicht sonderlich intuitiv.
Andere Möglichkeit bestünde darin, beim Klick in die Zeichenfläche zu testen, ob ein bereits vorhandenes Element ausgewählt wurde. Eine Variable "beweglich" zu setzen und diese so lange gültig zu lassen, bis die Maustaste losgelassen wird. Solange die Variable beweglich gültig ist, kann das Symbol verschoben werden.
Was meint Ihr? Ist Variante 2 intuitiv genug? Variante 2 hätte den weiteren Vorteil, dass man die Probleme mit dem Doppelklick umgeht.
Bin auch für Alternativen offen. Wie würdet Ihr so etwas lösen?
 

Xeonkryptos

Bekanntes Mitglied
Wenn ich ehrlich bin, finde ich Variante 2 leichter und einfacher und besser als deine erste Variante. Es gibt genug Programme, wo man, um etwas bewegen zu können, die Maus gedrückt halten muss, damit sich dieses "etwas" bewegen lässt.
Das sollte vielen zumindest vertraut sein. Ich finde Variante 1 mit dem Doppelklick eher als "unnatürlich". Man hat schon seine Gewohnheiten und wenn man etwas bewegen will ist das gedrückt halten der Maus wohl die beste und einfachste Variante. Für den User und dich.
 

Tobse

Top Contributor
Dü könntest ja ein STRG mit einbauen:
Der User drückt STRG wodurch alle verschiebbaren elemente hervogehoben werden (wie das passiert ist ja dafür unwichtig).
Jetzt kann der User, während er STRG gedrückt hält, mit dem Einzelklick per drag and drop die sachen verschieben. Und wenn STRG losgelassen wird kann er wieder formen zeichnen.
 
V

vanny

Gast
da du hier ja einmal eine Art Zeichnenmodus hast und einen Bewegen/Transformierenmodus, entweder wie schon erwähnt mit zBsp. Strg oder mit einer Toolbar und/oder nen Togglebutton für den Arbeitsmodus.
Das ganze schön ergänzt mit shortcuts und fertig is der Photoshop :p

Naja aber das Rad muss da ja nun wirklich nicht neu erfunden werden und mit Doppelklick arbeiten die wenigsten guten Programme (zumind. nicht innerhalb der Zeichenfläche)

Gruß Vanny

PS: Dein Avatar hat schon irgendwie etwas wiederliches an sich:eek:
 

propra

Aktives Mitglied
Noch einmal Danke für die Antworten.

Zum Verschieben würde ich Drag and Drop verwenden...

Was meinst Du damit? Klar soll es auf Drag & Drop hinauslaufen.
Meinst Du damit, dass ich was "fertiges" aus der Java Klassenbibliothek nutzen soll?

Dü könntest ja ein STRG mit einbauen:
Der User drückt STRG wodurch alle verschiebbaren elemente hervogehoben werden (wie das passiert ist ja dafür unwichtig).
Jetzt kann der User, während er STRG gedrückt hält, mit dem Einzelklick per drag and drop die sachen verschieben. Und wenn STRG losgelassen wird kann er wieder formen zeichnen.

Ich hatte mir für die Funktion der STRG-Taste überlegt, dass sie es ermöglicht mehrere Elemente auszuwählen.

da du hier ja einmal eine Art Zeichnenmodus hast und einen Bewegen/Transformierenmodus, entweder wie schon erwähnt mit zBsp. Strg oder mit einer Toolbar und/oder nen Togglebutton für den Arbeitsmodus.
Das ganze schön ergänzt mit shortcuts und fertig is der Photoshop :p

Im Moment erfolgt die Auswahl noch über die Menuleiste. Soll aber, wenn es fertig ist, ebenfalls über eine Toolbar einzustellen sein.

PS: Dein Avatar hat schon irgendwie etwas wiederliches an sich:eek:

Also nachmachen möchte ich es auch nicht, wobei es schon einen gewissen artistischen Reiz hat. Wer kann schon von sich behaupten, dass er so etwas kann... :D

Andere Möglichkeit bestünde darin, beim Klick in die Zeichenfläche zu testen, ob ein bereits vorhandenes Element ausgewählt wurde. Eine Variable "beweglich" zu setzen und diese so lange gültig zu lassen, bis die Maustaste losgelassen wird. Solange die Variable beweglich gültig ist, kann das Symbol verschoben werden.
Was meint Ihr? Ist Variante 2 intuitiv genug? Variante 2 hätte den weiteren Vorteil, dass man die Probleme mit dem Doppelklick umgeht.
Bin auch für Alternativen offen. Wie würdet Ihr so etwas lösen?

Nachdem ich mich nun mehrere Stunden damit beschäftigt habe, komme ich dem gewünschten Ablaufverhalten langsam näher.
Es soll so ablaufen, dass wenn die Maustaste gedrückt (muss dafür auch nicht zwangsläufig wieder losgelassen werden) wurde, geprüft wird, ob sich bereits ein Symbol an der Stelle befindet. Im positiven Falle wird es markiert und wenn nicht, dann soll je nach Modus gezeichnet werden. Ein Klick mit der rechten Maustaste hebt die Auswahl wieder auf.
Mein Problem war eigentlich, wie ich den Code auf die Methoden des MouseListener "verteile".
Wenn ich die Maustaste drücke und eine Zeit lang gedrückt lasse, dann wieder loslasse, wird das nicht immer als Mausklick registriert. Es werden also nur die Methoden
Code:
mousePressed(MouseEvent arg0)
und
Code:
mouseReleased(MouseEvent arg0)
ausgeführt. Manchmal wird aber auch die Methode
Code:
mouseClicked(MouseEvent arg0)
ausgeführt. Nach welchem Kriterium dies geschieht, weiß ich nicht. Hat da jemand vielleicht einen Tipp zu?
Ich denke dies ist eine intuitive und "normale" Vorgehensweise. Zumindest entspricht sie dem Verhalten auf meinem Desktop, wenn ich einen Ordner anklicke und ihn verschieben möchte.
 

propra

Aktives Mitglied
Das Thema hatten wir bereits. Es gibt keinen Sinn den einfachen Klick zu ignorieren

Das stimmt, dass es keinen Sinn macht. Aber man muss sich erst einmal Gedanken darüber machen, dass so ein Doppelklick im Prinzip das Ausführen von 2 Aktionen ist. Macht man das nämlich nicht und betrachtet den Doppelklick als einzelne Aktion, dann kommt man dazu, dass man einen Einzelklick von einem Doppelklick unterscheiden möchte. :D
Danke dafür.


Hatte damit gerechnet, dass Du mich auf das Tutorial verweist. Ich möchte im Moment meine Symbole immer nur auf einer Zeichenfläche verschieben, weshalb mir die Lösung etwas überproportioniert erscheint.
Trotzdem Danke und wer weiß, vielleicht brauche ich es ja doch noch.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
C Swing Component bei Doppelklick löschen AWT, Swing, JavaFX & SWT 4
P Swing JFrame minimiert sich bei Doppelklick auf die Titel-Leiste AWT, Swing, JavaFX & SWT 16
P JFrame schrumpft bei Doppelklick auf die Titelleiste AWT, Swing, JavaFX & SWT 0
I JTable: Doppelklick auf Table soll neues Fenster öffnen und Daten aus JTable anzeigen AWT, Swing, JavaFX & SWT 4
T JTree - Elemente mit Doppelklick auswählen AWT, Swing, JavaFX & SWT 6
C Swing Fensterresize durch doppelklick - wie die neue Grösse erhalten? AWT, Swing, JavaFX & SWT 3
TheWhiteShadow Swing JTextPanel Auswahlkriterium bei Doppelklick AWT, Swing, JavaFX & SWT 3
J Doppelklick Event AWT, Swing, JavaFX & SWT 32
Landei Swing JTree - Element mit Doppelklick auswählen AWT, Swing, JavaFX & SWT 4
O AWT Automatischer Doppelklick AWT, Swing, JavaFX & SWT 3
T JTable: editieren bei Doppelklick deaktivieren, aber... AWT, Swing, JavaFX & SWT 2
C Swing MouseListener Doppelklick-Geschwindigkeit AWT, Swing, JavaFX & SWT 4
M Doppelklick auf JTextField AWT, Swing, JavaFX & SWT 2
KrokoDiehl Swing Optimale Spaltenbreite auf Doppelklick (JTable) AWT, Swing, JavaFX & SWT 2
G JTree und doppelklick AWT, Swing, JavaFX & SWT 4
S Auswahlfenster: Datei beim Doppelklick öffnen AWT, Swing, JavaFX & SWT 8
Go ein "JLabel" mit Doppelklick editieren. AWT, Swing, JavaFX & SWT 5
M Doppelklick auf Component abfangen AWT, Swing, JavaFX & SWT 5
Daniel_L JTable - Links-rechts-Klick ist gleich Doppelklick? AWT, Swing, JavaFX & SWT 2
G JTable auf Doppelklick reagieren AWT, Swing, JavaFX & SWT 4
B MouseListener / doppelklick geht net AWT, Swing, JavaFX & SWT 16
F Ignoriere Mausklick falls erster Klick von Doppelklick . AWT, Swing, JavaFX & SWT 4
W MouseListener, getClickCount und Doppelklick AWT, Swing, JavaFX & SWT 6
S Bei SWT in einer Tabelle ein Event per Doppelklick auslösen? AWT, Swing, JavaFX & SWT 3
R mit SelectionListener Doppelklick? AWT, Swing, JavaFX & SWT 10
G JInternalFrame mit Doppelklick schließen möglich? AWT, Swing, JavaFX & SWT 2
R SWT-TreeViewer Doppelklick verarbeiten AWT, Swing, JavaFX & SWT 4
T JList + Doppelklick feststellen AWT, Swing, JavaFX & SWT 4
S [JTable] Editor erst nach Doppelklick AWT, Swing, JavaFX & SWT 5
C Aktion auführen nach Doppelklick auf Zeile in JTable AWT, Swing, JavaFX & SWT 10
T Zeile in JTable mit Doppelklick auswählen AWT, Swing, JavaFX & SWT 8
J Doppelklick auf JPanel AWT, Swing, JavaFX & SWT 3
J JList - doppelklick auf item -> neues fenster öffnet sich AWT, Swing, JavaFX & SWT 2
D Doppelklick in JList --> Wert auslesen AWT, Swing, JavaFX & SWT 8
E JTable: Selektion nur mit einem Doppelklick? AWT, Swing, JavaFX & SWT 7
D JavaFX Elemente aus VBox unterscheiden AWT, Swing, JavaFX & SWT 1
S Mouse Events in einer sortierten JTable unterscheiden AWT, Swing, JavaFX & SWT 18
S Unterscheiden ob ein Graphics-Objekt von einer JComponent oder einem BufferedImage kommt..? AWT, Swing, JavaFX & SWT 4
algorismi Unterscheiden zwischen zwei JLists AWT, Swing, JavaFX & SWT 5
G identische JMenuItem im actionListener unterscheiden AWT, Swing, JavaFX & SWT 4
P Unterscheiden zwischen Mautasten-Druck? AWT, Swing, JavaFX & SWT 3
B Doppelklicks von Singleklicks unterscheiden AWT, Swing, JavaFX & SWT 8

Ähnliche Java Themen

Neue Themen


Oben