Sei que é uma dúvida muito comum, mas em todos os lugares que vi não consegui achar uma solução.
Tenho a tela principal que é um JFrame e quando clico em um botão quero abrir um JPanel, este sendo uma outra classe.
O meu código está assim e não funciona.
teste t = new Teste(); // Essa é a classe JPanel
PrincipalGUI p = new PrincipalGUI();
p.add(t);
p.repaint();
p.revalidate();
Mas é isso que eu quero, tenho um JFrame principal e dentro dele um Jpanel, quando executo o programa ele abre esse JFrame
com o Jpanel como tela principal, daí tenho um botão, então quando clico nesse botão quero abrir um JPanle
e esse Jpanel tem um formulário, ele seria como uma outra tela do sistema.
Não sei se entendi direito, mas para usar o cardLayout eu teria que ter vários Jpanel dentro do JFrame principal e não é isso que eu quero.
Quero que cada Jpanel seja uma tela do sistema, qdo inicio abre a principal com JFrame e um Janel, nele tem uma barra de botões que funciona
como um menu, então em cada botão desses que eu clicar quero que chame uma nova classe JPanel, não sei se fui claro.
[quote]Não sei se entendi direito, mas para usar o cardLayout eu teria que ter vários Jpanel dentro do JFrame principal e não é isso que eu quero.
Quero que cada Jpanel seja uma tela do sistema, qdo inicio abre a principal com JFrame e um Janel, nele tem uma barra de botões que funciona
como um menu, então em cada botão desses que eu clicar quero que chame uma nova classe JPanel, não sei se fui claro.[/quote]
O cardLayout possibilita exatamente isso. O cardLayout “guarda” seus paineis. Quando vc clica no botão referente ao painel, ele “mostra” aquele painel.
Olha um exemplo bem tosco de cardLayout. Vê se te ajuda.
Main:
public class Main {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
new TelaPrincipal();
}
});
}
}
public class JPanel1 extends JPanel{
public JPanel1() {
init();
}
private void init() {
setLayout(new BorderLayout());
add(new JLabel("Oi, sou o Painel1!!"), BorderLayout.EAST);
setBackground(Color.BLUE);
}
}
Painel2:
public class JPanel2 extends JPanel{
public JPanel2() {
init();
}
private void init() {
setLayout(new BorderLayout());
add(new JLabel("Oi, sou o Painel2!!"), BorderLayout.EAST);
setBackground(Color.RED);
}
}
Eu acho que não interfere em nada, mas estou usando o netbeans para desenvolver então os componentes eu arrasto para a tela.
Pelo exemplo que vc me passou eu fiz isso
PrincipalGUI
public PrincipalGUI() {
initComponents();
setLayout(new BorderLayout());
add(getCardLayout(), BorderLayout.CENTER);
}