[RESOLVIDO]Diferença entre getContentPane() e setContentPane()
4 respostas
D
daniel.lopes
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???
vc está adicionando o MeuJpanel ao ContentPane, no entanto, quando vc usa
setContentPane(MeuJPanel);
está dizendo que o ContentPane é o MeuJPanel;
Entendeu?
D
daniel.lopes
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?
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:
Isso é correto, irrelevante, nada a ver ou boa prática?
Evitaria essas surpresas de exibição???
[]s
T
tecdanilo
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:
packagecontrole;importjava.awt.BorderLayout;importjava.awt.Container;importjavax.swing.JButton;importjavax.swing.JPanel;importjavax.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.*/publicclassNewJFrameextendsjavax.swing.JFrame{privateJPaneljPanel1;privateJButtonjButton1;privateJButtonjButton2;privateJPaneljPanel2;privateContainercontentPanel;/** * Auto-generated main method to display this JFrame */publicstaticvoidmain(String[]args){NewJFrameinst=newNewJFrame();inst.setVisible(true);}publicNewJFrame(){super();initGUI();}privatevoidinitGUI(){try{setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);{jPanel1=newJPanel();getContentPane().add(jPanel1,BorderLayout.CENTER);jPanel1.setPreferredSize(newjava.awt.Dimension(392,273));{jButton1=newJButton();jPanel1.add(jButton1);jButton1.setText("Teste, estou na panel 1");}}{jPanel2=newJPanel();getContentPane().add(jPanel2,BorderLayout.NORTH);jPanel2.setPreferredSize(newjava.awt.Dimension(392,88));{jButton2=newJButton();jPanel2.add(jButton2);jButton2.setText("Teste, estou na panel 2");}}contentPanel=getContentPane();pack();setSize(400,300);setContentPane(newJPanel());//comente esta linha e a linha de baixo e veja o que ocorresetContentPane(contentPanel);// descomente a linha de cima e comente está linha e veja o que ocorre}catch(Exceptione){e.printStackTrace();}}}
Qualqer dúvida só postar aqui.
Espero ter lhe ajudado. Té+!
D
daniel.lopes
Boa… bacana a explicação… ficou claro! Muito obrigado… logo mais posto outros tópicos com dúvidas semelhates. []s!