Pessoal, qual evento ou qual a maneira melhor de eu verificar a quanto tempo o usuário está pressionando um determinado label ?
Contar tempo mouse pressionado
7 Respostas
Uma solução é armazenar o tempo entre os dois eventos MouseEvent:
MouseEvent.MOUSE_PRESSED
MouseEvent.MOUSE_RELEASED
Esses são os eventos do mouse: http://docs.oracle.com/javase/1.4.2/docs/api/java/awt/event/MouseListener.html
Acho que você vai ter que criar um contador que seja iniciado quando o botão for pressionado e encerrado quando o botão for liberado.
Esses são os eventos do mouse: http://docs.oracle.com/javase/1.4.2/docs/api/java/awt/event/MouseListener.htmlAcho que você vai ter que criar um contador que seja iniciado quando o botão for pressionado e encerrado quando o botão for liberado.
Na verdade, preciso contar quando o botão estiver pressionado, não quando for liberado…
Esses são os eventos do mouse: http://docs.oracle.com/javase/1.4.2/docs/api/java/awt/event/MouseListener.htmlAcho que você vai ter que criar um contador que seja iniciado quando o botão for pressionado e encerrado quando o botão for liberado.
Na verdade, preciso contar quando o botão estiver pressionado, não quando for liberado…
Então, você vai usar 2 eventos, uma para iniciar o contador quando o botão for pressionado e o outro para parar o contador quando o botão for solto. Significa que enquanto pressionado, o contador estará rodando.
Tem um exemplo prático de como fazer isto?
na verdade, esse contador não seria interrompido por um outro evento, ele seria interrompido após um determinado tempo…
Tem um exemplo prático de como fazer isto?
na verdade, esse contador não seria interrompido por um outro evento, ele seria interrompido após um determinado tempo…
import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Frame;
import java.awt.Panel;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
class MouseReleasedExample {
public static void main(String args[]) {
Frame frame = new Frame("MouseAdapterExample");
Button button1 = new Button("A");
Panel p = new Panel();
p.add(button1);
frame.add(button1, BorderLayout.NORTH);
frame.pack();
frame.setVisible(true);
button1.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent me) {
System.out.println("mousePressed " + me.getX());
}
public void mouseReleased(MouseEvent me) {
System.out.println("mouseReleased " + me.getX());
}
});
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
}
mouseReleased(MouseEvent e) In MouseAdapter
package br.com.cpaconsulting.cep.strutsplus;
import java.util.Timer;
import java.util.TimerTask;
public class TimerSample {
public static void main(String[] args) {
//1- Taking an instance of Timer class.
Timer timer = new Timer("Printer");
//2- Taking an instance of class contains your repeated method.
MyTask t = new MyTask();
//TimerTask is a class implements Runnable interface so
//You have to override run method with your certain code black
//Second Parameter is the specified the Starting Time for your timer in
//MilliSeconds or Date
//Third Parameter is the specified the Period between consecutive
//calling for the method.
timer.schedule(t, 0, 2000);
}
}
class MyTask extends TimerTask {
//times member represent calling times.
private int times = 0;
public void run() {
times++;
if (times <= 5) {
System.out.println("I'm alive...");
} else {
System.out.println("Timer stops now...");
//Stop Timer.
this.cancel();
}
}
}
Tem um exemplo prático de como fazer isto?
na verdade, esse contador não seria interrompido por um outro evento, ele seria interrompido após um determinado tempo…
Vamos lá.
Primeiro não é preciso usar um contador. Java não é clipper e tem funções de tempo.
Segundo, não é preciso usar um timer basta usar o próprio sistema.
É preciso vc ter entendido o mecanismo de eventos e que vc precisa saber o tempo no momento em que o usuario pressionou o mouse e o momento em que ele liberou. O tempo entre ambos os eventos é o tempo pressionado.
Este tempo deverá ser curto suponho. Ninguem vai ficar uma hora ou um dia apertando um label. Nesse caso vc precisa de um mecanismo de medir tempos curtos que seja especializado em intervalos de tempo.
Em java vc tem a função System.nanoTime() que lhe dá um long em nanosegundos. Este tempo não é tempo de relógio (vc não consegue saber que horas são com este método) mas é ideal para o que vc precisa.
Então no momento do inicio do pressionamento vc coloca os nanosegundos em uma variável , no momento de liberar o mouse vc usa este método de novo. A diferença entre os longs é o numero de nanosegundos que passou.
long nanoSegundosPressao;
button1.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent me) {
nanoSegundosPressao = System.nanoTime();
}
public void mouseReleased(MouseEvent me) {
long tempoDePressionamento = System.nanoTime() - nanoSegundosPressao;
// faça algo com tempoDePressionamento
}
});
Existem formas mais OO de fazer, mas isto já lhe dá a ferramenta básica.