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!