Boa tarde a todos, meu primeiro post e ja é um problemão pra vcs ein… hhheeheh
Eu estou tentando Criar um app de 1 so JFrame.
e de acordo com o menu clicado eu uso o setContentPane()
para exibir o JPanel correto. até ai tudo funciona.
O problema é que cada vez que chamo o mesmo Jpanel
ele ja aparece preenchido com as informações anteriores.
não consigo fazer o JPanel ser recriado quando uso ele no setContentPane().
Alguem pode me dar uma luz? nem que seja de vela… heheheh…
O ideal seria para isso usar o CardLayout.
De qualquer forma, para o painel não ser preenchido, você terá que remover o painel quando for fechado e criar um novo (com new) quando ele for aberto novamente.
Então vini… eu to fazendo assim:
private JFrame jFrame = null; // @jve:decl-index=0:visual-constraint="10,10"
private JMenuBar jJMenuBar = null;
private JMenu fileMenu = null;
private JMenuItem Equacoes2MenuItem = null;
private JMenuItem painelPrincipalJMenuItem = null;
private JPanel painel = null;
private JPanel jpConteudo = null; // @jve:decl-index=0:visual-constraint="443,57"
public JPanel getPainel()
{
if(this.painel == null)
{
Painel1 pn1 = new Painel1();
setPainel(pn1.initialize());
}
return this.painel;
}
public void setPainel(JPanel painel)
{
this.painel = painel;
}
private JPanel getJpConteudo()
{
if (jpConteudo == null)
{
jpConteudo = new JPanel();
jpConteudo.setLayout(new BorderLayout());
jpConteudo.setSize(new Dimension(246, 138));
jpConteudo.add(getPainel(), BorderLayout.CENTER);
}
return jpConteudo;
}
public static void main(String[] args)
{
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
IDG application = new IDG();
application.getJFrame().setLocationRelativeTo(null);
application.getJFrame().setVisible(true);
}
});
}
private JFrame getJFrame()
{
if (jFrame == null)
{
jFrame = new JFrame();
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jFrame.setBounds(new Rectangle(0, 0, 300, 265));
jFrame.setMinimumSize(new Dimension(300, 265));
jFrame.setJMenuBar(getJJMenuBar());
jFrame.setContentPane(getJpConteudo());
jFrame.setTitle("IDG Soluções");
}
return jFrame;
}
private JMenuBar getJJMenuBar()
{
if (jJMenuBar == null)
{
jJMenuBar = new JMenuBar();
jJMenuBar.add(getFileMenu());
}
return jJMenuBar;
}
private JMenu getFileMenu()
{
if (fileMenu == null)
{
fileMenu = new JMenu();
fileMenu.setText("Arquivo");
fileMenu.add(getPainelPrincipalMenuItem());
fileMenu.add(getEquacoes2MenuItem());
}
return fileMenu;
}
private JMenuItem getEquacoes2MenuItem()
{
if (Equacoes2MenuItem == null)
{
Equacoes2MenuItem = new JMenuItem();
Equacoes2MenuItem.setText("Equações do 2º Grau");
Equacoes2MenuItem.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
PainelEquacao pneq = new PainelEquacao();
trocaPainel(pneq.initialize());
pneq = null;
}
});
}
return Equacoes2MenuItem;
}
private JMenuItem getPainelPrincipalMenuItem()
{
if (painelPrincipalJMenuItem == null)
{
painelPrincipalJMenuItem = new JMenuItem();
painelPrincipalJMenuItem.setText("Painel Principal");
painelPrincipalJMenuItem.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
Painel1 pn1 = new Painel1();
trocaPainel(pn1.initialize());
}
});
}
return painelPrincipalJMenuItem;
}
private void trocaPainel(JPanel jpN)
{
getJpConteudo().removeAll();
getJpConteudo().repaint();
setPainel(jpN);
getJpConteudo().add(getPainel(), BorderLayout.CENTER);
SwingUtilities.updateComponentTreeUI(getJFrame());
}
}
ainda não consegui achar o erro…
quando eu clicar no menu não era pra ativar o new dentro do metodo trocar Painel:???
mas mesmo assim ainda fica o painel criado quando eu chamo ele de novo …
No seu código você só cria os paineis uma única vez. Então, ou vc cria um método de limpeza em cada painel, ou recria os painéis.
Blz vini… o problema era que eu tava criando os paineis estaticos…
eu tirei isso e fiz tudo de novo …
parece que ta funcionando agora…
vlw ai…