Como renovar/modificar JPanel?

7 respostas
Dil14

Olá pessoal,

Estou desenvolvendo um programinha acadêmico que consiste em uma janela principal, a qual contém uma imagem, um campo de texto e dois botões.

Esses botões quando clicados, chamam um método que modifica o JPanel no Frame - Janela, ou seja, quando se clica no Botão1 deve aparecer a imagem1 e o texto1 em Janela, e quando se clica no Botão2 deve aparecer a imagem2 e o texto2 em Janela.

Porém, quando clico nos botões o método não limpa o que havia anteriormente em Janela, e mistura as imagens e textos das janelas do programa.

A dúvida é: Como remover tudo do Frame, antes de inserir um novo JPanel?

Abraço a todos

Flw!

7 Respostas

R

Acho que JFrame.getContentPane().removeAll() resolve o seu problema.

Dil14

OK, roger_rf,

Vc resolveu parte do problema.

Vlw!

Dil14

Ok galera,

A dica que o roger deu foi muito boa e ajudou bastante, mas ainda tenho um problema no meu programa e gostaria q alguém desse uma analisada.

Tenho o seguinte método que recebe um JPanel para ser inserido em janela que é um frame:

public void mostraJanela(JPanel painelGenerico, String title){
    	
    	 this.painelGenerico = painelGenerico; 
 	 	 this.title = title;    	
 	 	 	
 	 	
    	janela.setTitle(title);
    	janela.getContentPane().add(painelGenerico); 
    	janela.setSize(1024, 768); // Tamanho da janela
    	janela.show(); // Mostra a janela
    }

A ideia desse método, como jah disse na primeira postagem, é fazer com que de acordo com a escolha de um de dois botões seja exibido em janela um painel diferente.

Segue o código que recebe o clique do mouse em um dos botões:

public void actionPerformed(ActionEvent e) {  
        if ("botao1".equals(e.getActionCommand())) { 
            
            janela.getContentPane().removeAll();
             
            SMuscular objM = new SMuscular();
            
            obj.mostraJanela(objM.getPanel(),"Sistema Muscular");
             
             
            
            
        } else {
            
            janela.getContentPane().removeAll();
            
            SOsseo objO = new SOsseo();
            
            obj.mostraJanela(objO.getPanel(),"Sistema Ósseo");
            
             }
    }

Em relação ao botao1 ele exibe o Panel da referente classe perfeitamente, porém se for clicado o botao2 ele acusa o erro java.lang.NullPointerException que eu sei que trata de uma exceção que diz que o clique aponta para um objeto inexistente, MAS O PROBLEMA ESTÁ JUSTAMENTE AWE: A CLASSE QUE O BOTÃO2 REFERENCIA EXISTE :!:

Não sei como resolver isso, por favor preciso de auxílio.

Abraço a todos

R

Mostre o stack trace para darmos uma olhada.

Dil14

O stack trace eh o que segue:

Exception in thread “AWT-EventQueue-0” java.lang.NullPointerException

at SistemaMSistemaO.mostraJanela(SistemaMSistemaO.java:73)

at SistemaMSistemaO.actionPerformed(SistemaMSistemaO.java:63)

at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)

at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318 )

at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)

at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)

at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)

at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:272)

at java.awt.Component.processMouseEvent(Component.java:6041)

at javax.swing.JComponent.processMouseEvent(JComponent.java:3265)

at java.awt.Component.processEvent(Component.java:5806)

at java.awt.Container.processEvent(Container.java:2058 )

at java.awt.Component.dispatchEventImpl(Component.java:4413)

at java.awt.Container.dispatchEventImpl(Container.java:2116)

at java.awt.Component.dispatchEvent(Component.java:4243)

at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4322)

at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3986)

at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3916)

at java.awt.Container.dispatchEventImpl(Container.java:2102)

at java.awt.Window.dispatchEventImpl(Window.java:2440)

at java.awt.Component.dispatchEvent(Component.java:4243)

at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)

at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)

at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)

at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168 )

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)

at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)
R

Alguns pontos para checar:

  • está apontando para um objeto não-nulo?
  • <janela.getContentPane()> está apontando para um objeto não nulo?
  • está apontando para um objeto não-nulo?

O stack trace informa que o erro está acontecendo na rotina mostraJanela() e não em actionPerformed(), isso é mais uma pista para você investigar.

R

dil14, só uma pergunta, mas você adicionou um addActionListener no botão 2 também ?

Criado 29 de maio de 2009
Ultima resposta 29 de mar. de 2010
Respostas 7
Participantes 3