nach 5 sec maus gedrückt

Speedkill

Erfahrenes Mitglied
Hallo liebe JavaFreaks,

ich hoffe ihr könnt mir helfen.

Ich habe in einem Programm einen MouseListener an mein Fenster gebunden und nun möchte ich daß nach dem ich die Maustaste länger als 5 sec gedrückt halte etwas passiert. Ich weiß zwar daß es die Funktion mousePressed gibt aber dann ruft er ja nur den Code auf der da drin steht, ob man nun 1,2 oder 5 secs drückt.
Ich habe auch schon die Idee gehabt mir die akt. Zeit zu merken und dann immer wieder neu abzufragen und voneinander abzuziehen aber, hier habe ich daß Problem daß ich in der while Schleife nicht weiß wie ich abfragen kann ob die Taste noch gedrückt ist oder nicht ?
Ich habe schon das Forum hier durchsucht aber entweder es gibt nix zu dem Thema oder ich benutze die falschen Suchwörter.

Auf jedenfall wäre ich sehr froh wenn mir jemand auf die Sprünge helfen könnte.

Vielen Dank schonmal

Speedkill
 
Hallo!

Suchst du vielleicht sowas?
Code:
/*
 * Created on 19.12.2004@18:01:43
 *
 * TODO Explain me...
 */
package de.tutorials;

import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;

/**
 * @author Darimont
 * 
 */
public class FiveSecondTriggerExapmle extends JFrame {

	private final static long DELAY = 5000L;

	private long pushTime;

	private long releaseTime;

	public FiveSecondTriggerExapmle() {
		super("FiveSecondTriggerExapmle");
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		JLabel label = new JLabel("please hold me...");
		label.addMouseListener(new MouseAdapter() {

			public void mousePressed(MouseEvent e) {
				pushTime = System.currentTimeMillis();
			}

			public void mouseReleased(MouseEvent e) {
				releaseTime = System.currentTimeMillis();
				if (releaseTime - pushTime > DELAY) {
					JOptionPane.showMessageDialog(
							FiveSecondTriggerExapmle.this,
							"The message after 5 seconds...");
				}
			}
		});
		getContentPane().add(label);
		pack();
		setVisible(true);

	}

	public static void main(String[] args) {
		new FiveSecondTriggerExapmle();
	}
}

Gruß Tom
 
Danke schonmal !

Das ist nicht schlecht aber so wie ich das sehe passiert hier nur eine Aktion beim loslassen des buttons.
Ich bräuchte aber etwas das noch während des drückens feststellt daß 5 sec. um sind und dann eine Aktion auslöst.
Ich kriege aber den Denkansatz irgendwie nicht hin.

MfG
Speedkill
 
Hallo!

Dann eben so:

Code:
/*
 * Created on 19.12.2004@18:01:43
 *
 * TODO Explain me...
 */
package de.tutorials;

import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.Timer;
import java.util.TimerTask;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;

/**
 * @author Darimont
 * 
 */
public class FiveSecondTriggerExapmle extends JFrame {

	private final static long DELAY = 5000L;

	private long pushTime;

	private TimerTask checker = new TimerTask() {
		public void run() {
			if (pushTime != 0L && System.currentTimeMillis() - pushTime > DELAY) {
				JOptionPane.showMessageDialog(FiveSecondTriggerExapmle.this,
						"The message after 5 seconds...");
				pushTime = 0L;
			}
		}
	};

	public FiveSecondTriggerExapmle() {
		super("FiveSecondTriggerExapmle");
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		JLabel label = new JLabel("please hold me...");
		label.addMouseListener(new MouseAdapter() {

			public void mousePressed(MouseEvent e) {
				pushTime = System.currentTimeMillis();
			}

			public void mouseReleased(MouseEvent e) {
				pushTime = 0L;
			}
		});
		Timer t = new Timer();
		// Alle 2 Sekunden prüfen ...
		t.schedule(checker, 0L, 2000L);
		getContentPane().add(label);
		pack();
		setVisible(true);

	}

	public static void main(String[] args) {
		new FiveSecondTriggerExapmle();
	}
}

Gruß Tom
 
Jawoll

Tausendfachen Dank !

Genau das habe ich gesucht ... nun muss ich das nur noch in meinen Code wurschteln.

Super endlich geht es weiter.

Danke nochmal,

Speedy
 
Zurück