Piscar Botão

4 respostas
J

Oi...

Estou montando um jogo para um projeto da faculdade, o jogo Genius (aquele de piscar os botões e ir seguindo a seqüência).

Bom, aos poucos, estou conseguindo fazer funcionar, mas precisei usar uma thread e não sei como solucionar o que quero. O código abaixo mostra melhor:

public class ClassePisca {
    static Thread t = Thread.currentThread( );    
    
    public static void bVermelhoPisca( JButton botao ) {             
        try {                 
            botao.setBackground( new Color( 128, 0, 0 ) ); //vermelho escuro   
            //pause de 0,3 segundos
            t.start( );
            t.sleep( 300 );
            botao.setBackground( new Color( 255, 0, 0 ) ); //vermelho normal
        } 
        catch (InterruptedException ie) { 
            return; 
        } 
}

Bom, o que acontece é o seguinte: o método muda a cor do botão para vermelho escuro, depois a thread para a tela, mas na hora de voltar para o vermelho normal parece que a thread impossibilita...

já tentei usar finally, stop, interrupt, entre outros... mas num funfou...

Ajudem-me por favor!

4 Respostas

V

Remova as seguintes linhas:

static Thread t = Thread.currentThread( ); t.start( );

E no lugar de

faça assim:

Vê se resolve! Flw! :thumbup:

V

Dê uma olhada na classe Timer, do Swing.

Há exemplos de como usa-la neste tópico:
http://www.guj.com.br/posts/list/15/52964.java

J

Muito obrigada pelas duas idéias… mas, acho que a classe Timer é menos complicada… Pelo menos não dá aquele ‘lag’ igual na thread.

Mas, tentei implementar e me enrolei pra caramba. O código:

public class ClassePisca { public static void bVermelhoPisca( JButton botao ) { botao.setBackground( new Color( 128, 0, 0 ) ); //trocar imediato para vermelho escuro Timer tempo = new Timer( 3000, null ); // ficar na cor por 3 segundos tempo.start( ); botao.setBackground( new Color( 255, 0, 0 ) ); //voltar para o vermelho original

1º: não sei se declaro a variável tempo dentro ou fora do método;
2º: no lugar de null deveria ficar um actionListener ou algo do gênero?
3º: dentro do actionListener ou outro, deveria estar o botao.setBackground( new Color( 128, 0, 0 ) );?

Muito obrigada novamente pelas ajudas e fico no aguardo.

:smiley:

V

Crie o timer (variável tempo) na sua classe, não dentro do método.
Crie um action listener que faz a cor piscar.
Associe o action listener ao timer.

Criado 31 de agosto de 2007
Ultima resposta 5 de set. de 2007
Respostas 4
Participantes 3