Olá pessoal,
Primeiramente, gostaria de dizer que já pesquisei várias coisas aqui no fórum e em outros lugares da internet. Aparentemente meu problema já foi resolvido em outros tópicos mas as soluções apresentadas nunca davam certo 
A minha situação é o seguinte… Eu tenho um JFrame e dentro dele tenho:
- um JMenu com alguns items nele
- um JPanel
Bem… O meu problema é o seguinte: Dependendo do item que o usuário clicar no Menu, devo carregar um JPanel (q eu já tenha criado) naquele JPanel que está dentro do JFrame…
Agradeço a todos que puderem me ajudar!
Obrigado,
DanielSR
[quote=fabiofalci]E quais soluções tu tentou?
Pode ser desde layouts como o http://java.sun.com/docs/books/tutorial/uiswing/layout/card.html
Ou até mesmo componentes como http://java.sun.com/docs/books/tutorial/uiswing/components/tabbedpane.html[/quote]
Na verdade eu já tinha visto esse CardLayout mas eu estava querendo fazer de uma outra forma…
Eu queria algo do tipo: O JPanel q eu adicionei ao meu JFrame passe a apontar para algum outro JPanel q eu tenha criado… Isso não é possível? Eu lembro ter feito isso há muito tempo atrás mas definitivamente não me recordo como eu fiz 
Isso é justamente o que o CardLayout faz, mas ao invés de um ele aponta pra vários. Sendo que
ele mostra um de cada vez, o que tu indicar!
Pesquise sobre o CardLayout e como utiliza-lo, acredito que seja a melhor forma p/ vc trabalhar com este recurso visual.
Sugiro também que você tenha Classes que herdam da classe JPanel p/ que a manutenção no seu fonte seja melhor, invez de estanciar vários JPanel´s dentro do seu JForm.
Abracos.
[quote=guivirtuoso]Pesquise sobre o CardLayout e como utiliza-lo, acredito que seja a melhor forma p/ vc trabalhar com este recurso visual.
Sugiro também que você tenha Classes que herdam da classe JPanel p/ que a manutenção no seu fonte seja melhor, invez de estanciar vários JPanel´s dentro do seu JForm.
Abracos.[/quote]
Eu tenho essas classes extendendo JPanel e lá no meu JFrame eu tenho um JPanel adicionado e que eu queria ir alterando conforme o usuário clicasse em determinados botoes… Eu não queria dizer como eu penso q eu devo fazer pq estou com medo de estar totalmente errado, mas aqui vai como eu acho q eu poderia fazer:
jPanel.add(new ClasseQExtendeJPanel());
Eu acredito q precise fazer mais coisa… mas essas coisas q eu nao sei o q fazer… E tb não sei se isso é certo…
Quem pode dizer que está errado né? :lol:
Mas assim, tenho um exemplinho bem simples do cardlayout, é por ai
public class CardLayoutTest extends JPanel {
CardLayout cardLayout = null;
JPanel mainPanel = null;
JPanel panel1 = null;
JPanel panel2 = null;
JPanel panel3 = null;
public CardLayoutTest() {
this.initialize();
}
protected void initialize() {
this.setLayout(new BorderLayout());
this.add(getPanel(), BorderLayout.CENTER);
this.add(getButtonPanel(), BorderLayout.SOUTH);
}
public JPanel getButtonPanel() {
JPanel buttonPanel = new JPanel();
JButton b = new JButton("1");
b.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
cardLayout.show(mainPanel, "panel1");
}
});
buttonPanel.add(b);
b = new JButton("2");
b.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
cardLayout.show(mainPanel, "panel2");
}
});
buttonPanel.add(b);
b = new JButton("3");
b.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
cardLayout.show(mainPanel, "panel3");
}
});
buttonPanel.add(b);
return buttonPanel;
}
public JPanel getPanel1() {
if (panel1 == null) {
panel1 = new JPanel();
panel1.setBackground(Color.WHITE);
panel1.add(new JLabel("Panel1"));
}
return panel1;
}
public JPanel getPanel2() {
if (panel2 == null) {
panel2 = new JPanel();
panel2.setBackground(Color.LIGHT_GRAY);
panel2.add(new JLabel("Panel2"));
}
return panel2;
}
public JPanel getPanel3() {
if (panel3 == null) {
panel3 = new JPanel();
panel3.setBackground(Color.CYAN);
panel3.add(new JLabel("Panel3"));
}
return panel3;
}
public CardLayout getCardLayout() {
if (cardLayout == null) {
cardLayout = new CardLayout();
}
return cardLayout;
}
public JPanel getPanel() {
if (mainPanel == null) {
mainPanel = new JPanel(getCardLayout());
mainPanel.add(getPanel1(), "panel1");
mainPanel.add(getPanel2(), "panel2");
mainPanel.add(getPanel3(), "panel3");
getCardLayout().show(mainPanel, "panel1");
}
return mainPanel;
}
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setContentPane(new CardLayoutTest());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(500, 400);
frame.setVisible(true);
}
}
É um painel que muda pra outros 3 de acordo com os botões.
Olá,
Tentei seguir a sugestão do CardLayout ficou assim:
OBS:
- estou fazendo no NetBeans e copiei apenas as partes referentes a essa parte do CardLayout…
- as classes Cadastro() e Consulta() extendem JPanel
public class Main extends javax.swing.JFrame {
private CardLayout cardLayout = null;
private JPanel painelCadastro = null;
private JPanel painelConsulta = null;
private JPanel jPanelPrincipal;
public Main() {
initComponents();
}
private void initComponents() {
jPanelPrincipal = new JPanel(getCardLayout());
jPanelPrincipal.add(getPainelCadastro(), "cadastro");
jPanelPrincipal.add(getPainelConsulta(), "consulta");
}
public CardLayout getCardLayout() {
if (cardLayout == null) {
cardLayout = new CardLayout();
}
return cardLayout;
}
public JPanel getPainelCadastro() {
if (painelCadastro == null) {
painelCadastro = new Cadastro();
}
return painelCadastro;
}
public JPanel getPainelConsulta() {
if (painelConsulta == null) {
painelConsulta = new Consulta();
}
return painelConsulta;
}
//eventos dos items do menu
private void jMenuItemConsultarActionPerformed(java.awt.event.ActionEvent evt) {
getCardLayout().show(jPanelPrincipal, "cadastro");
}
private void jMenuItemCadastrarActionPerformed(java.awt.event.ActionEvent evt) {
getCardLayout().show(jPanelPrincipal, "consulta");
}
}
Porém, ao executar o código é lançada a seguinte excessão:
Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: wrong parent for CardLayout
Não sei o que eu posso ter feito errado e gostaria de saber se alguém tem alguma sugestão para o erro…
Agradeço desde já,
DanielSR
A principio está ok cara.
Mas tem mais código? Talvez alguma linha esteja estragando…
Tu nao esta inicializando de novo o jPanelPrincipal? Como tu está adicionando o jPanelPrincipal no teu JFrame?