1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

JPanel não atualiza componente na tela.

Fala galera!

Sou iniciante em Java, e em interface Gráfica. Rescentemente alterei um código, porém, após adicionar a linha Thread.sleep(1000); O JPanel não atualiza o componente na tela. Segue exemplo:

import java.awt.*;  
import java.awt.event.*;  
import javax.swing.*;  


class PainelDesenhaFormas extends JPanel {  
    public void paintComponent(Graphics g) {  
        super.paintComponent(g); 

        g.setColor(Color.red);  
        for (int i = 0; i < 100; i += 3){ 
            g.drawOval(i, i, 100, 100);
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }  
}  

class JanelaDesenhaFormas extends JFrame {  
    public JanelaDesenhaFormas() {  
        setTitle("Desenha Formas");  
        setSize(600, 800);  
        addWindowListener(new WindowAdapter() {  
            public void windowClosing(WindowEvent e)  
            { System.exit(0); }  
        });  
        getContentPane().add(new PainelDesenhaFormas());  
    }  
}  

public class DesenhaFormas {  
    public static void main(String args[]) {  
        JanelaDesenhaFormas jdf = new JanelaDesenhaFormas();  
        jdf.show();  
    }  
}

Se eu tirar o Thread, o JPanel é executado, e mostra vários circulos em sequência.

A minha ideia: A cada 1 segundo, desenha um novo circulo em uma nova posição. Como se fosse uma animação. =/

Alguma dica?

Muito obrigado pela atenção!

  • tente apos o Thread.sleep chamar o metodo repaint() do JPanel para ver se resolve...

    Cristian Urbainski   27 de jun de 2013
  • pvrouza, Até tentei, porém mesmo assim, ele não mostra. =/ Fiz umas pequenas modificações, e diminui o loop, e percebi uma coisa: Ao diminuir o loop, como por exemplo 5, ele espera 5 segundos para atualizar o "desenho".

    EduSP   27 de jun de 2013
  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

1 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags exception gráficos java threads ou faça a sua própria pergunta.