aqui nesse TimerAdd faço um if para que ao clicar no botao com código abaixo ele inicie um evento que dure 3 segundos mostrando uma msg nesse período, após qro que apague essa msg, porém nao está funcionando da maneira correta, as vezes quando clico da certo, mas qdo clico novamente ou a msg nao apaga mais, ou ela fica piscando e depois some… o que estou fazendo de errado?
abaixo o código do button que clico…
private void jButton9ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
jLabel13.setForeground(Color.red);
jLabel13.setText("Linha adicionada!"); //mensagem que qro que apareça por determinado tempo.
count3 = 0;
TimerAdd.setDelay(1000);
TimerAdd.start();
addLinha();
UltimoMov();
}
Ola, não sei se é o seu caso, mas nunca tive muito sucesso com .stop(); da thread, também nunca corri mto atraz disso para ver porque não funciona. pode ser que seja esse seu problema…
zicky23
humm, pode ser
mas será que se eu tirar o .stop() não irá criar um loop infinito, pois ai ele não vai parar de contar…??
valeu…
L
leo.andven
Qual é a classe do TimerAdd? Ficou faltando para poder ajudar melhor!
Normalmente, Thread.stop() não é recomendado. Mas, TimerAdd não parece ser Thread…
zicky23
é da Classe Timer, peguei esses códigos de umas vídeos aulas do neri como se fosse threads… será que to errado?
me da uma mão ai…
valeu!!!
L
leo.andven
E o pacote? Quando for falar de uma classe, sempre dê o nome todo, como por exemplo java.util.Date.
Se for a javax.swing.Timer, ela não é uma Thread, ou tanto faz, não tem como saber e nem precisa! Você pode sim chamar um .stop() para parar (não tem nada falando na API).
Porém, não parece ser a swing…
ViniGodoy
Você pode usar o stop() do timer. O único stop() que é proibido é o da Thread.
zicky23
será que é esse:
Class org.netbeans.examples.lib.timerbean.Timer
??
valeu!
zicky23
Baixei esse TimerBean.jar da internet, seguindo exemplos dos Vídeos do Neri…
valeu!!!
L
leo.andven
Não conheço a classe que você mencionou.
Mas fiz um exemplo do que você está fazendo. (Está tudo junto num grande main, mas é só para utilizar de exemplo hein!) Pode utilizar de exemplo, mas não sei se isso é o melhor jeito de fazer em Swing (não sou acostumado com telas...)
publicclassMain{publicstaticvoidmain(String[]args){finalTimertimer=newTimer("Botão",true);//vamos usar o Timer padrão do Java para fazer as tarefas de fundofinalJLabellbl1=newJLabel("Aperte o botão!");//label com o texto que vai mudarfinalJButtonbtn1=newJButton("Aperta!");//botão que dispara a mudançabtn1.addActionListener(newActionListener(){//adiciona a reação ao botão@OverridepublicvoidactionPerformed(ActionEvente){lbl1.setText("Você apertou!");//define o texto novobtn1.setEnabled(false);//desabilita o botão, para a pessoa esperarbtn1.setText("Espera...");//muda o texto do botão, porque simtimer.schedule(newTimerTask(){//agenda o "reset": limpa o texto e habilita o botão@Overridepublicvoidrun(){//vamos apagar o texto e habilitar o botãolbl1.setText("Aperta agora!");btn1.setText("Aperte!");btn1.setEnabled(true);}},3000);//essa chamada faz o TimerTask ser executado em 3 segundos}});//padrão para montar a telaJPaneljp=newJPanel();jp.add(lbl1);jp.add(btn1);JFramejf=newJFrame("Demo java.util.Timer");jf.add(jp);jf.pack();jf.setVisible(true);}}
zicky23
valeu, vou testar e tentar adequar ao meu sistema…
ViniGodoy
Tópico movido para o fórum de java avançado.
zicky23
é isso mesmo que tava precisando!!!
valeu, vou adequá-lo agora no meu sistema!!!
avisarei e postarei o código para que outros programadores na mesma situação possam se utilizar desse tópico!
valeu
zicky23
obrigado…
L
leo.andven
:thumbup:
Recomendo, porém, que você utilize o guia do Java para SwingWorker se for fazer telas, acho que é mais interessante!
Aí você posta um demo…
zicky23
bom ficou perfeito…!
muito obrigado pessoal… ficou assim:
private void jButton9ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
final Timer timer = new Timer("Add linha", true);
jLabel13.setText("Nova linha adicionada!");
addLinha();
UltimoMov();
timer.schedule(new TimerTask() {
@Override
public void run() {
jLabel13.setText("");
}
}, 3000);
}