Java MausEvent - pressed

bawde

Lt. Commander
Registriert
Juli 2006
Beiträge
1.175
Hi, ich möcht für eine GUI gerne Pfeiltasten nutzen zum:
- 1x klick: zähler + 1 (kein problem)
- bei gedrückter Maustaste: automatisches hochzählen

nun weiß ich aber nicht wie ich das mit der gedrückten Maustaste lösen kann. Da gäbe es den MouseListener mit Mouse Pressed, aber wie ich dann weiter mache oder ob das der richtige Weg ist weiß ich nicht. Ob, Schleifen, oder Schleifen mit Zeitzähler, oder eine andere Klasse, oder Treads...vielleicht gibts da ein Tutorial oder ähnliches.
 
Du machst in der Mouse Pressed eine Schleife. Dann brauchst du noch eine abtastrate.

while(mousePressed) {
zaehler++;
System.sleep(20);
}

Das sleep legt jedoch den ganzen main-Thread lahm, das solltest du berücksichtigen. Eventuell in einem Thread auslagern.
 
oder du schreibst die zeit des mouseDown-events auf, wartest aufs nächste mouseUp event, und vergleichst die zeiten
 
Hi,

besser:

java.util.Timer zum Abfragen von MousePressed mit einem java.util.TimerTask verwenden. Den Timer auf die Gewünschte Frequenz konfigurieren (long wert in ms), im TimerTask dann MousePressed abfragen und ggf. hochzählen.

Die sleep Schleife ist, naja, hässlich und schlecht implementiert ;)
 
iLike7Up schrieb:
Du machst in der Mouse Pressed eine Schleife. Dann brauchst du noch eine abtastrate.

while(mousePressed) {
zaehler++;
System.sleep(20);
}

Das sleep legt jedoch den ganzen main-Thread lahm, das solltest du berücksichtigen. Eventuell in einem Thread auslagern.

ah danke, mousePressed muss als als Bedingung in die while Schleife.

Bei mir sah das so aus:
public void mousePressed(MouseEvent e) {
while(true){zaehler++};
}

@bozz
werde ich mir ansehen

@PaddyG
wahrscheinlich eine sehr elegante lösung, werde ich mir ansehen
 
Das mit der Sleep-Schleife geht echt mal gar nicht!
 
Einfacher Klick: Counter erhöhen.
Mindestens eine halbe Sekunde gedrückt halten: Counter wird alle 150ms erhöht.
Gegebenfalls nicht immer einen neuen Thread erzeugen, sondern ihn irgendwo schlafen legen, das liegt dann beim Entwickler.

Code:
new MouseAdapter() {

	private int counter = 0;
	private Thread tCounter;

	public void mousePressed(MouseEvent e) {
		tCounter = new Thread() {

			public void run() {
				try {
					sleep(500);
				} catch (InterruptedException e) {
					return;
				}
				while (true) {
					counter++;
					System.out.println("new counter: " + counter);
					try {
						sleep(150);
					} catch (InterruptedException e) {
						break;
					}

				}
			};
		};
		tCounter.start();
	}

	public void mouseReleased(MouseEvent e) {
		if (tCounter != null) {
			tCounter.interrupt();
		}
	}

	public void mouseClicked(MouseEvent e) {
		counter++;
		System.out.println("new counter: " + counter);
	}
});
 
Zurück
Oben