Looping Mouse

2 respostas
bruno.savoini

preciso que um metodo fique executando enquanto o mouse estiver pressionado, se soltar o mouse quero a parada do looping....

no caso o método seria um while que tem esta função

c = c+1;

o problema é que isso gera um looping.....

tenho esse código....

private void formMousePressed(java.awt.event.MouseEvent evt) {
pressed = true;
while (pressed == true) {
c = c+1;
System.out.println("contador"+c);
}
}

private void formMouseReleased(java.awt.event.MouseEvent evt) {
pressed = false;
}

mas como o pressed fica nesse looping(necessário) o released nao é chamado nunca....
imagino que eu precise de uma Thread, se for necessário como eu usaria?

.......

Um modo que eu tentei aqui foi criar uma Thread, mas oúnico modo que eu seifazer é esse:

criar uma classe dentro da página assim:

class NovaThread implements Runnable

daí na classe main eu chamo essa classe desse modo

NovaThread nt = new NovaThread();
Thread t = new Thread(nt);
t.start;

ainda assim não deu ceto, alguem pode ajudar?
valew!

2 Respostas

G
import java.awt.GridLayout;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

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

public class Frame extends JFrame implements MouseListener{

	private static final long serialVersionUID = 1L;

	private Thread threadContador;
	private JLabel lblContagem;
	
	public static void main(String[] args) {
		new Frame();
	}
	
	public Frame(){
		setTitle("Contador:");
		setBounds(100,100,100,100);
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		setResizable(false);
		
		this.lblContagem = new JLabel("Iniciar contagem...");
		this.lblContagem.addMouseListener(this);
		
		this.getContentPane().setLayout(new GridLayout(1,1));
		this.getContentPane().add(lblContagem);
		this.setVisible(true);
		
	}
	
	
	public void mouseClicked(MouseEvent e) {
	}

	public void mousePressed(MouseEvent e) {
		
		if(this.threadContador != null){
			mouseReleased(e);
		}
		
		this.threadContador  = new ThreadContador(this.lblContagem);
		this.threadContador.start();
	}

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

	public void mouseEntered(MouseEvent e) {
	}

	public void mouseExited(MouseEvent e) {
	}
	
	
	public class ThreadContador extends Thread{
		
		
		private int contador = 0;
		private JLabel lblExibir;
		private boolean continuar;
		
		public ThreadContador( JLabel lblExibir){
			this.lblExibir = lblExibir;
			this.lblExibir.setText("0");
			this.continuar = true;
		}
		
		public void run() {
			while(continuar){
				this.lblExibir.setText("Contagemr: " + (++this.contador));
				try{
					Thread.sleep(100);
				}catch (Exception e) {	}
			}
		}
		
		public void interrupt() {
			super.interrupt();
			this.continuar = false;
		}
	}
	
}
bruno.savoini

valew!!! perfeito!! muito obrigado!!
valew mesmo!!!
:lol: :smiley:

só vou estudá-lo e ver onde estou errando!

Criado 19 de maio de 2008
Ultima resposta 19 de mai. de 2008
Respostas 2
Participantes 2