Basicamente o que o Gilberto disse é que, em vez de usar um ActionListener (que na verdade pega só o “Mouse Released” do clique do botão), você teria de usar um MouseListener mesmo, e tratar os eventos “Mouse Pressed” (para ligar o seu tratamento repetitivo) e “Mouse Released” (para desligar seu tratamento repetitivo).
Note que o loop não pode ficar no tratamento de Mouse Pressed; ele só deve disparar uma thread, ou um timer rápido, ou coisa parecida. O Mouse Released deve desligar o processamento que está nessa thread, ou timer, ou sei lá o quê.
import java.util.Timer;
import java.util.TimerTask;
/**
*
* @author homisinho
*/
public class ControlTime {
Timer timer;
boolean Estado;
int Delay;
int Time;
/**
*
* @param func type TimerTask Function to be executed;
* @param d Time before running timer, in second;
* @param t Time to run, in second;
*/
public ControlTime(int d,int t) {
Estado=false;
Delay = d;
Time = t;
}
public void Stop(){
timer.cancel();
Estado = false;
}
public void Play(TimerTask func){
timer = new Timer();
timer.schedule(func,Delay*1000, Time*1000);
Estado = true;
}
/**
*
* @return if time is in use;
*/
public boolean getState(){
return(Estado);
}
}
Para utilizar basta criar o objeto da classe:
public ControlTime tmr_2 = new ControlTime(60, 60);
E depois criar o timetask e passar como parametro:
TimerTask tt = new TimerTask() {
public void run() {
getDados(eq);///metodo qualquer q vc quer q execute
}
};
tmr_2.Play(tt);
Obrigado pela sua resposta. Deixa eu ver se eu entendi esse código direito. No terceiro código que você coloca, ele implementa a função a ser executada dentro de um método run, isso quer dizer que esse código vai dentro da Thread ?
Mais um coisa, caso vá dentro da Thread, significa que eu terei que criar um uma thread para cada botão que eu precisar disso ? (Pq são no mínimo 10), ou colocar todos os métos dentro dele e fazer um case pra saber qual método executar (uma segunda opção)?