Como atualizar o JPanel além do repaint() e revalidate()?

5 respostas
M

Olá pessoal,

Estou há alguns dias sofrendo para mostrar um gráfico feito no jFreechart em um Panel.
Já olhei vários fóruns e tópicos aqui mesmo no GUJ, mas não consegui descobrir o que pode estar errado.

O que acontece é o seguinte : Estou lendo algumas tabelas e com os dados gerados eu crio o Chart e chartPanel e adiciono esse chartPanel em um JPanel que já tenho criado, só que o gráfico não aparece nem com ‘reza brava’.

Já utilizei o debug pra saber se os dados das tabelas estão vindo e está tudo ok. Estou utilizando o Netbeans e já adicionei os .jar do JFreechart na lib do projeto.

Eu preciso dar algum refresh no jPanel ou algo parecido?

Segue parte do código que adiciona o chartPanel no JPanel:

private void jcGraficosActionPerformed(java.awt.event.ActionEvent evt) {

…

CriaGraficos grBarraAtual = new CriaGraficos(percentualOcupacao, totalLeitos, textoV, textoH);

JFreeChart chartB = grBarraAtual.gBVert2D_Ocup_Leitos(dataset);

chartPanel = new ChartPanel(chartB, false);

jpGrafico.add(chartPanel);

jpGrafico.revalidate();

jpGrafico.repaint();

}

Adicionei o código inteiro caso alguém precise visualizá-lo.

grato
Marcio Oliveira

5 Respostas

F

tenta

java.awt.EventQueue.invokeLater(new Runnable(){
			public void run(){
				jpGrafico.repaint();
			}
				
			});
M

Valeu fzamara, funcionou!

Detalhe, precisei colocar o revalidate() também. Ficou assim :

if (chartPanel != null) {
            jpGrafico.add(chartPanel);
            java.awt.EventQueue.invokeLater(new Runnable(){   
                public void run(){   
                    jpGrafico.revalidate();
                    jpGrafico.repaint();   
                }   
               
            });  
        }

Outra coisa, com os layouts : Absolute Layout, Card Layout e Null Layout - NÃO Funciona.
Coloquei o BorderLayout e funcionou direitinho.

Obrigado pela dica!

Marcio

F

Situação atipica, pq ja usei somente com repaint(), e tambem ja usei com esses outros layouts ai.
Mais esse negocio de atulizar Painel no Java deixa agente meio loco mesmo ne.
hehe

M

Não sei se vou falar besteira, mas lá vai…

Será que difere de versão do JDK (estou com a 6.0_05) ou então do NetBeans que estou usando a 6.1?

até

I

Estou com o mesmo problema, e uso o netBeans 6.1

Me ajuda aí, onde devo colocar esse envento?

coloquei assim, e nao funcionou:
public void setNomePaciente ( String nomePaciente ) {
        this.nomePaciente = nomePaciente;
        jTPaciente.setText(this.nomePaciente);
        jTPaciente.revalidate();   
        jTPaciente.repaint();
        System.out.println("cade? " + jTPaciente.getText());
    
    java.awt.EventQueue.invokeLater(new Runnable(){   
        public void run(){   
            jTPaciente.revalidate();   
            jTPaciente.repaint();
        }   
               
        });  
    }
Criado 17 de março de 2008
Ultima resposta 28 de mai. de 2008
Respostas 5
Participantes 3