[RESOLVIDO]Diferença entre getContentPane() e setContentPane()

Colegas, tenho uma aplicação swing que trabalha de forma diferente quando utilizo o getContentPane().add(MeuJPanel) e quanto utilizo o setContentPane(MeuJPAnel).

Na primeira, as janelas não são setadas como visible corretamente. Dá cagada do tipo, os restos da janela anterior nã somem completamente. mas quando no código simplesmente eu troco o getContentPane().add(MeuJPanel) por setContentPane(MeuJPanel), a aplicação funciona que é uma beleza… Há alguma explicação lógica para isso???

[] a todos!!!

Tem resposta lógica sim:

quando vc usa:

getContentPane().add(MeuJPanel);

vc está adicionando o MeuJpanel ao ContentPane, no entanto, quando vc usa

setContentPane(MeuJPanel);

está dizendo que o ContentPane é o MeuJPanel;

Entendeu?

[quote=tecdanilo]Tem resposta lógica sim:

quando vc usa:

getContentPane().add(MeuJPanel);

vc está adicionando o MeuJpanel ao ContentPane, no entanto, quando vc usa

setContentPane(MeuJPanel);

está dizendo que o ContentPane é o MeuJPanel;

Entendeu?[/quote]

Humm… acho que saquei a diferença… então, seria correto dizer que, ao trabalhar com swing onde tenho o frame principal e os JPanels são alternados dentro do frame, seria boa prática então utilizar os dois?
Ex:

[code]
JFrame frame = new JFrame();
JPanel container = new JPanel();
MeuJPAnel painel = new MeuJPanel();

container.getContentPAne().add(painel); //para adicionar o painel a um container e, logo em seguida,
frame.setContentPane(container); //para ser exebido tudo no frame?

Assim, para trocar o painel com algum action listener, utilizaria:

frame.remove(container);
MeuJPanel outroPainel  = new MeuJPanel();
container.getContentPane.add(outroPainel);
frame.setContentPane(container);

Isso é correto, irrelevante, nada a ver ou boa prática?

Evitaria essas surpresas de exibição???

[]s

Do meu ponto de vista sim. Você pode optar por instanciar os panels na hora q vai mostrar a tela ou pode criá-los durante a execução do programa.

Dá uma olhada aí no exemplo que eu fiz:

package controle;
import java.awt.BorderLayout;
import java.awt.Container;

import javax.swing.JButton;
import javax.swing.JPanel;

import javax.swing.WindowConstants;


/**
* This code was edited or generated using CloudGarden's Jigloo
* SWT/Swing GUI Builder, which is free for non-commercial
* use. If Jigloo is being used commercially (ie, by a corporation,
* company or business for any purpose whatever) then you
* should purchase a license for each developer using Jigloo.
* Please visit www.cloudgarden.com for details.
* Use of Jigloo implies acceptance of these licensing terms.
* A COMMERCIAL LICENSE HAS NOT BEEN PURCHASED FOR
* THIS MACHINE, SO JIGLOO OR THIS CODE CANNOT BE USED
* LEGALLY FOR ANY CORPORATE OR COMMERCIAL PURPOSE.
*/
public class NewJFrame extends javax.swing.JFrame {
	private JPanel jPanel1;
	private JButton jButton1;
	private JButton jButton2;
	private JPanel jPanel2;
	private Container contentPanel;

	/**
	* Auto-generated main method to display this JFrame
	*/
	public static void main(String[] args) {
		NewJFrame inst = new NewJFrame();
		inst.setVisible(true);
	}
	
	public NewJFrame() {
		super();
		initGUI();
	}
	
	private void initGUI() {
		try {
			setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
			{
				jPanel1 = new JPanel();
				getContentPane().add(jPanel1, BorderLayout.CENTER);
				jPanel1.setPreferredSize(new java.awt.Dimension(392, 273));
				{
					jButton1 = new JButton();
					jPanel1.add(jButton1);
					jButton1.setText("Teste, estou na panel 1");
				}

			}
			{
				jPanel2 = new JPanel();
				getContentPane().add(jPanel2, BorderLayout.NORTH);
				jPanel2.setPreferredSize(new java.awt.Dimension(392, 88));
				{
					jButton2 = new JButton();
					jPanel2.add(jButton2);
					jButton2.setText("Teste, estou na panel 2");
				}
			}
			contentPanel = getContentPane();
			pack();
			setSize(400, 300);
			setContentPane(new JPanel());//comente esta linha e a linha de baixo e veja o que ocorre
			setContentPane(contentPanel);// descomente a linha de cima e comente está linha e veja o que ocorre
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}

Qualqer dúvida só postar aqui.

Espero ter lhe ajudado. Té+!

Boa… bacana a explicação… ficou claro! Muito obrigado… logo mais posto outros tópicos com dúvidas semelhates. []s!