JAVA - Tenho duas labels uma delas deve ficar invisível após 20 segundos que a aplicação iniciar. Ajuda?

14/12/2016

0

Boa noite,

Estou tentando mas não estou conseguindo, dentro do meu JFrame tenho duas Jlabel , lbInfoA e lbInfoB ... a label lbInfoB está visivel normalmente e quero que ela desapareça (setVisible(false)), após 20 segundos de execução da aplicação.

Tentei usar Thread.sleep mas isso só faz a janela do frame aparecer após 20 segundos. Por exemplo quando eu executo a aplicação ela leva 20 segundos para subir a janela do frame...

public class Reminder extends javax.swing.JFrame {

    /**
     * Creates new form Reminder
     */
    public Reminder() {
        initComponents();
        lbInfoB.setVisible(false);
        try {
            Thread.sleep(20000);
        } catch (InterruptedException ex) {
            Logger.getLogger(Teste.class.getName()).log(Level.SEVERE, null, ex);
        }
        lbInfoB.setVisible(true);
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */



Dai tentei dar uma olhada na internet pra ver o que eu achava e montei esse método. Mas o problema dele é que ao executar a aplicação a lbInfoB já fica visível logo que inicia... coloquei umas mensagens no meio pra ver se ele estava pulando alguma etapa, mas não, ele passa por todas, só não conta os 20 segundos que eu preciso, até a label ter que ficar true:

public class Reminder {

    Timer timer;

    
        public Reminder(int seconds){

            
            timer = new Timer();
            timer.schedule(new RemindTask(), seconds*1000);
        }

        class RemindTask extends TimerTask {

        public void run() {
            timer.cancel();
        }
        }
        public static void main(String args[])  {
            new Reminder(20);
            lbInfoB.setVisible(true);
        }



Alguém por favor pode me ajudar... Só preciso de um exemplo mais ou menos que eu me viro... É que realmente na net eu procurei pra caramba mas não achei nenhum exemplo de "iniciar execução e depois interromper" a maioria dos exemplos é pra ficar em looping continuo de contagem de tempo :/
Igor Castilho

Igor Castilho

Responder

Post mais votado

15/12/2016

Já achei algo que funcionou! Valew...


public class Reminder extends javax.swing.JFrame {
    
    int counter = 20;
    
    public Reminder() {
        initComponents();
        setSize(400, 400);
        lbInfoB.setVisible(false);
    }


    private void formWindowOpened(java.awt.event.WindowEvent evt) {                                  
        Timer timer = new Timer(); //new timer
        TimerTask task = new TimerTask() {         
            public void run() {                
                counter --;
                if (counter == -1){
                    timer.cancel();   
                    lbInfoB.setVisible(true);
                } 
            }
        };
    timer.scheduleAtFixedRate(task, 1000, 1000); // =  1000 = a delay de 1 segundo no contador;
    }                      



Assim quando abre o frame ele já começa a contar os 20 segundos... dps de 20 segundos aberto ele joga a Label como true! hahaha nice to ficando bom nisso ~. ~

Igor Castilho

Igor Castilho
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar