JPanel não aparece

Oi pessoal,

eu criei um JFrame central pelo Eclipse Juno, que faz o código para a pessoa, e depois criei duas outras classes JPanel.
Então, criei no JFrame central uma barra de menus com os JMenuItens referentes aos JPanels que criei.
Depois instanciei eles, e coloquei os eventos errados nos jmenuitens. Então, tive que largar o código por alguns dias.
Mas agora que voltei, estou bem perdido; com pouca instrução,
eu gostaria que vocês tivessem a paciência de me indicar os problemas do código se possível.
Como um ponto de retomada com novas informações, porque não sei por onde recomeçar… Eis:

package sstAdmin;

import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JMenuBar;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.GroupLayout;
import javax.swing.GroupLayout.Alignment;
import java.awt.Point;
import java.awt.Dimension;
import java.awt.ComponentOrientation;
import java.awt.Toolkit;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.border.EtchedBorder;
import javax.swing.LayoutStyle.ComponentPlacement;
import java.awt.Rectangle;
import java.awt.Component;
import java.util.Locale;
import java.awt.event.FocusAdapter;
import java.awt.event.FocusEvent;

@SuppressWarnings({ "serial", "unused" })
public class SstAdmin extends JFrame {

	private JPanel conteudo;
	final PainelEmpresas pnlEmpresas;
	final PainelNovaEmpresa pnlNovaEmpresa;

	/** Launch the application. */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					SstAdmin sstAdmin = new SstAdmin();
					sstAdmin.setVisible(true);
					sstAdmin.pack();
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}
	
	public void setaPainel(){
		setContentPane(pnlNovaEmpresa);
	}

	/** Create the frame. */
	public SstAdmin() {
		setMinimumSize(new Dimension(950, 700));
		setBounds(new Rectangle(0, 0, 0, 0));
		setIconImage(Toolkit.getDefaultToolkit().getImage(SstAdmin.class.getResource("/imagens/sst1.png")));
		setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
		setTitle("SST Admin");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(900, 100, 1014, 707);

		conteudo = new JPanel();
		conteudo.setAlignmentY(Component.TOP_ALIGNMENT);
		conteudo.setPreferredSize(new Dimension(0, 0));
		conteudo.setMinimumSize(new Dimension(0, 0));
		conteudo.setBorder(new EmptyBorder(0, 0, 0, 0));
		setContentPane(conteudo);

		pnlEmpresas = new PainelEmpresas();
		pnlEmpresas.setAlignmentY(Component.TOP_ALIGNMENT);
		pnlEmpresas.setAlignmentX(Component.CENTER_ALIGNMENT);
		pnlEmpresas.setBounds(new Rectangle(0, 0, 0, 0));
		pnlEmpresas.setSize(new Dimension(0, 0));
		pnlEmpresas.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
		pnlEmpresas.setPreferredSize(new Dimension(0, 0));
		pnlEmpresas.setVisible(true);

		pnlNovaEmpresa = new PainelNovaEmpresa();
		setContentPane(pnlNovaEmpresa);

		JMenuBar menuBar = new JMenuBar();
		setJMenuBar(menuBar);

		JMenu mnuEmpresas = new JMenu("Empresas");
		menuBar.add(mnuEmpresas);

		JMenuItem mniRegistros = new JMenuItem("Registros");
		mnuEmpresas.add(mniRegistros);

		JMenu mnNovoRegistro = new JMenu("Novo registro");
		mnuEmpresas.add(mnNovoRegistro);

		final JMenuItem mniEmpresa = new JMenuItem("Empresa");
		mniEmpresa.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				pnlEmpresas.setVisible(false);
				pnlNovaEmpresa.setVisible(true);
				pnlNovaEmpresa.setPreferredSize(new Dimension(946, 735));
				pnlNovaEmpresa.setMinimumSize(new Dimension(946, 735));
			}
		 });
		mnNovoRegistro.add(mniEmpresa);
		
		JMenuItem mniEpis = new JMenuItem("EPI's");
		mniEpis.addFocusListener(new FocusAdapter() {
			@Override
			public void focusGained(FocusEvent e) {
				//
			}
		});
		mnNovoRegistro.add(mniEpis);

		JMenuItem mniOrdemServico = new JMenuItem("Ordem de serviço");
		mnNovoRegistro.add(mniOrdemServico);

		JMenuItem mntmEmpresas = new JMenuItem("Empresas");
		// mnNovo.add(mntmEmpresas);

		JMenuItem mntmNovaEmpresa = new JMenuItem("Nova empresa");
		
		GroupLayout gl_conteudo = new GroupLayout(conteudo);
		gl_conteudo.setHorizontalGroup(gl_conteudo.createParallelGroup(
				Alignment.TRAILING).addComponent(pnlEmpresas,
				Alignment.LEADING, GroupLayout.DEFAULT_SIZE, 1012,
				Short.MAX_VALUE));
		gl_conteudo.setVerticalGroup(gl_conteudo.createParallelGroup(
				Alignment.LEADING).addComponent(pnlEmpresas,
				GroupLayout.DEFAULT_SIZE, 657, Short.MAX_VALUE));
		conteudo.setLayout(gl_conteudo);
	}
}

Para fazer um painel “aparecer”, use setContentPane(painel). Isso fará com que a área de conteúdo do JFrame principal exiba o painel de interesse. Uma alternativa mais flexível para dar suporte a vários painéis seria usar um painel com abas (JTabbedPane). Recomendo consultar o link a seguir:
http://docs.oracle.com/javase/tutorial/uiswing/components/tabbedpane.html
Procure a seção “Tabs With Custom Components”.

Ah! Desculpe.

Entre os painéis pnlEmpresas e pnlNovaEmpresa, era para o programa iniciar exibindo o painel pnlEmpresas e quando clicássemos no menu correspondente ao pnlNovaEmpresa, o primeiro sumisse e aparecesse o pnlNovaEmpresa.

Mas ele é executado exibindo o pnlNovaEmpresa. E até agora eu não inseri nenhuma ação no menu registros.
Foi mais por isso que criei o tópico…

Obrigado.
Lucas Ribeiro

Acho que se você usar setContentPane(pnlEmpresas) em vez setContentPane(pnlNovaEmpresa) vai obter o resultado desejado.

Amigo roger_rf,

mesmo com “setContentPane(painel);” ele não renderiza…
Já tentei usar “conteudo.add(painel);”.
Eu conheço jtabbedpane (já até usei),
mas preciso aprender a manipular esses comandos presentes.

Segue um experimento permitindo a seleção de painéis em tempo de execução:

[code]public class AppGuj extends JFrame {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override public void run() {
AppGuj appGuj = new AppGuj();
appGuj.setVisible(true);
}});
}

public AppGuj() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(10, 10, 600, 600);
setTitle(“AppGuj”);

// Cria o painel superior
JPanel painelSuperior = new JPanel(new FlowLayout());
painelSuperior.setBorder(BorderFactory.createMatteBorder(0, 0, 1, 0, Color.BLACK));

// Cria o painel central
final JPanel painelCentral = new JPanel(new BorderLayout());
painelCentral.add(new JLabel("Painel Central"), BorderLayout.CENTER);

// Cria o painel de conteúdo (contém o painel superior e o central)
final JPanel painelConteudo = new JPanel(new BorderLayout());
painelConteudo.add(painelSuperior, BorderLayout.NORTH);
painelConteudo.add(painelCentral, BorderLayout.CENTER);

setContentPane(painelConteudo);

// Cria o painel de empresas
final JPanel painelEmpresas = new JPanel(new BorderLayout());
painelEmpresas.add(new JLabel("Painel de Empresas"), BorderLayout.CENTER);

// Cria o painel de novas empresas
final JPanel painelNovaEmpresa = new JPanel(new BorderLayout());
painelNovaEmpresa.add(new JLabel("Painel de Novas Empresas"), BorderLayout.CENTER);

// Cria o botão de empresas
JButton botaoEmpresas = new JButton("Empresas");
botaoEmpresas.addActionListener(new ActionListener() {
  @Override public void actionPerformed(ActionEvent evt) {
    painelConteudo.remove(painelCentral);
    painelConteudo.remove(painelNovaEmpresa);

    painelConteudo.add(painelEmpresas, BorderLayout.CENTER);
    painelConteudo.validate();
    AppGuj.this.repaint();
  }});

painelSuperior.add(botaoEmpresas);

// Cria o botão de novas empresas
JButton botaoNovaEmpresa = new JButton("Nova Empresa");
botaoNovaEmpresa.addActionListener(new ActionListener() {
  @Override public void actionPerformed(ActionEvent evt) {
    painelConteudo.remove(painelCentral);
    painelConteudo.remove(painelEmpresas);

    painelConteudo.add(painelNovaEmpresa, BorderLayout.CENTER);
    painelConteudo.validate();
    AppGuj.this.repaint();
  }});

painelSuperior.add(botaoNovaEmpresa);

}
}
[/code]

Pessoal,

desculpe… Reiniciei o código.

Pessoas,

acabei de descobrir algo importante para minha dúvida anterior:

do fundo pra frente no frame é de baixo pra cima no código.

Fui reinstanciar os paineis e o segundo (de baixo apareceu sobrepondo o primeiro), então inverti a ordem e o problema foi corrigido.

Lhes agradeço a atenção…