Vou direto ao problema, tenho um JFrame que vai abrir com um JPanel inicial que seria o panel principal e que tem 2 JButton, um para mudar o JPanel que vai possuir outros JButtons e um que todo panel vai ter, que é o JButton “Sair”, nos outros panels ele só vai voltar pro panel anterior, enquanto que o do panel inicial vai encerrar a aplicação, agr vem os dois problemas:
Primeiro:
—> To tendo problemas com o JFrame para fazer a mudança de panels, aqui vai o codigo da parte que ta dando problema, de resto é o que faz normalmente pra add um panels no frame:
public void mudarPanel(JPanel panel) {
frame.removeAll();
frame.add(panel);
frame.repaint();
}
Segundo:
—> Como faço para o botao fechar a aplicação?
Ocorreu um terceiro problema, agr quando eu mudo o Painel ele não aparece os JButtons do segundo painel, só aparecem quando eu redimensiono a Frame, ai sempre aparece.
O que poderia ser?
hm, eu tinha colocado e layout nulo, e agr eu tirei, mas continua dando problema e ainda ele fica redimensionando os paineis, o primeiro ele coloca todo o frame e o outro ele dimensiona um pouco menor mas não do tamanho que tinha que ser
// incluir onde o frame é construido
JScrollPane root = new JScrollPane();
frame.add(root);
// troca os painéis, não é necessário remover o anterior
root.setViewportView(panel);
o, vou tentar fazer isso, mas só pra deixar claro, todos os paineis tem o mesmo tamanho pois todos herdam da classe pai que é extendido do JPane e que em seu construtor eu defini um tamanho(isso pq cada panel é uma classe diferente, para facilitar as configuracoes individuais de cada)
Com esse root eu posso tirar o frame.removeAll()? e é só colocar essas linhas?
Como eu faço para os panels terem o tamanho pre definido neles?
Sim, pois agora não seria mais no frame que seria feita a troca. O JScrollPane sempre remove o anterior pois só funciona com um panel, portanto não é necessário o removeAll, mas se não for o JScrollPane é necessário o remover antes de colocar.
Dimension d = new Dimension(300, 300);
panel.setPreferredSize(d);
panel.setMinimumSize(d);
panel.setMaximumSize(d);
Conseguir resolver, fiz uma busca mais demorada sobre como resolver o problema dos componentes sumindo, então encontrei um comentário que listou alguns tipos de problemas que podiam ocorrer, e um que me chamou a atenção foi ele dizer que podia ser a falta do metodo .validate(), eu tinha reparado que algumas pessoas usavam ele em seus códigos, mas não fazia idéia do pq, então dei uma lida pra que serve mas não entendi muito bem, pelo que eu entendi, ele valida o tamanho dos componentes que estão inseridos, me corrijam se eu estiver errado rsrs, to aprendendo ainda
foi nesse link, o cara tava tendo um problema semelhante ao meu: