Como chamar um JPanel a partir do Jframe

5 respostas
Arcanous

Olá pessoal!

Estou colocando essa questão aqui porque as respostas dispostas no forum não solucionaram meu problema.
Acredito que é simples para quem já fez uma primeira vez! O que não é o meu caso!

Tenho uma tela principal com menu, no qual está um itemmenu “Cadastrar”. Já tenho feito a tela “Cadastrar”, porém não consigo fazer com que a tela principal chame a tela Cadastrar quando o clicar na opção “Cadastrar” no itemmenu da tela principal!

Alguma sugestão?

Grato!

5 Respostas

gqferreira

A sua tela principal é um JFrame certo? A sua "tela" de cadastro é um JPanel? JPanel's são conteiners que precisa estar em outro conteiner, ou seja, o seu painel de cadastro precisa ser adicionado a outro painel ou a um jframe. Não é possivel exibir o painel com uma janela com barra de titulo e tudo. Por exemplo: (OBS: NAO TESTEI)

public class Principal extends JFrame{

public static main (String[] args){
Principal principal = new Principal();
principal.setVisible(true);
}

//Construtor do frame
public Principal(){
setLayout(null);
setSize(400,300);
setTitle("Teste");

Cadastro cadastro = new Cadastro();
cadastro.setBounds(0,30,400,270);

add(cadastro);
}
}
public class Cadastro extends JPanel{

//Construtor do painel
public Cadastro(){
setBackground(new java.awt.Color(217,255,168));
}
}
Arcanous

Muito obrigado pela prontidão da resposta!

Essa questão do JPanel dever estar dentro de um container já ouvi falar, porém, no código que você postou como eu chamo a tela? Em que momento?

grato!

gqferreira

Dê uma olhada nesse exemplo:

package teste;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.WindowConstants;

public class Principal extends javax.swing.JFrame {
	private JMenuBar mbMenuBar;
	private JMenu meMenu;
	private JMenuItem miMenuItem;

	/**
	 * Auto-generated main method to display this JFrame
	 */
	public static void main(String[] args) {
		Principal principal = new Principal();
		principal.setVisible(true);
	}

	public Principal() {
		setLayout(null);
		setSize(400,300);
		setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
		{
			mbMenuBar = new JMenuBar();
			setJMenuBar(mbMenuBar);
			{
				meMenu = new JMenu();
				mbMenuBar.add(meMenu);
				meMenu.setText("Menu");
				{
					miMenuItem = new JMenuItem();
					meMenu.add(miMenuItem);
					miMenuItem.setText("Menu Item");
					miMenuItem.addActionListener(new ActionListener() {

						@Override
						public void actionPerformed(ActionEvent e) {
							// TODO Auto-generated method stub
							Cadastro cadastro = new Cadastro();		
							cadastro.setBounds(0,0,400,300);
							add(cadastro);
							repaint();
						}
					});
				}
			}
		}	
	}
}
package teste;

public class Cadastro extends javax.swing.JPanel {

	public Cadastro(){		
		this.setBackground(new java.awt.Color(0,0,0));
	}
}

Testado e funcionando

Arcanous

Grande, essa é o JPanel Cadastro

public class Cadastro extends javax.swing.JPanel {


    public Cadastro() {
        initComponents();
   
    }

  
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">
    private void initComponents() {

        nome = new javax.swing.JLabel();
        sobrenome = new javax.swing.JLabel();
        cpf = new javax.swing.JLabel();
        rg = new javax.swing.JLabel();
        telefone = new javax.swing.JLabel();
        jTextFieldNome = new javax.swing.JTextField();
        jTextFieldSobrenome = new javax.swing.JTextField();
        jTextFieldCPF = new javax.swing.JTextField();
        jTextFieldRG = new javax.swing.JTextField();
        jTextFieldTelefone = new javax.swing.JTextField();
        salvarcad = new javax.swing.JButton();
        cancelarCad = new javax.swing.JButton();
        voltarCad = new javax.swing.JButton();

        nome.setText("Nome:");

        sobrenome.setText("Sobrenome:");

        cpf.setText("CPF:");

        rg.setText("RG:");

        telefone.setText("Telefone:");

        salvarcad.setText("Salvar");

        cancelarCad.setText("Cancelar");

        voltarCad.setText("Voltar");

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
        this.setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addGroup(layout.createSequentialGroup()
                                .addComponent(nome)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(jTextFieldNome, javax.swing.GroupLayout.PREFERRED_SIZE, 334, javax.swing.GroupLayout.PREFERRED_SIZE))
                            .addGroup(layout.createSequentialGroup()
                                .addComponent(sobrenome)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(jTextFieldSobrenome, javax.swing.GroupLayout.DEFAULT_SIZE, 307, Short.MAX_VALUE)))
                        .addContainerGap())
                    .addGroup(layout.createSequentialGroup()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                            .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
                                .addComponent(telefone)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(jTextFieldTelefone))
                            .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
                                .addComponent(rg)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                                .addComponent(jTextFieldRG))
                            .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
                                .addComponent(cpf)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(jTextFieldCPF, javax.swing.GroupLayout.PREFERRED_SIZE, 232, javax.swing.GroupLayout.PREFERRED_SIZE)))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 24, Short.MAX_VALUE)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(salvarcad)
                            .addComponent(cancelarCad)
                            .addComponent(voltarCad))
                        .addGap(21, 21, 21))))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(nome)
                    .addComponent(jTextFieldNome, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(sobrenome)
                    .addComponent(jTextFieldSobrenome, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(cpf)
                    .addComponent(jTextFieldCPF, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(salvarcad))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(rg)
                    .addComponent(jTextFieldRG, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(cancelarCad))
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(telefone)
                    .addComponent(jTextFieldTelefone, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(voltarCad))
                .addContainerGap(22, Short.MAX_VALUE))
        );
    }// </editor-fold>


    // Variables declaration - do not modify
    private javax.swing.JButton cancelarCad;
    private javax.swing.JLabel cpf;
    private javax.swing.JTextField jTextFieldCPF;
    private javax.swing.JTextField jTextFieldNome;
    private javax.swing.JTextField jTextFieldRG;
    private javax.swing.JTextField jTextFieldSobrenome;
    private javax.swing.JTextField jTextFieldTelefone;
    private javax.swing.JLabel nome;
    private javax.swing.JLabel rg;
    private javax.swing.JButton salvarcad;
    private javax.swing.JLabel sobrenome;
    private javax.swing.JLabel telefone;
    private javax.swing.JButton voltarCad;
    // End of variables declaration

}

Esse é o JFrame que deveria chamar o JPanel. Implementei o código que você acrescentou!

public class TelaPrincipal extends javax.swing.JFrame {

    /** Creates new form TelaPrincipal */
    public TelaPrincipal() {
        initComponents();
    }

    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        jMenuBar1 = new javax.swing.JMenuBar();
        cliente = new javax.swing.JMenu();
        cadastrocli = new javax.swing.JMenuItem();
        atualizar = new javax.swing.JMenuItem();
        buscar = new javax.swing.JMenuItem();
        excluir = new javax.swing.JMenuItem();
        jSeparator1 = new javax.swing.JPopupMenu.Separator();
        sair = new javax.swing.JMenuItem();
        jMenu2 = new javax.swing.JMenu();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        cliente.setText("Cliente");

        cadastrocli.setText("Cadastrar");
        cadastrocli.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                cadastrocliActionPerformed(evt);
            }
        });
        cliente.add(cadastrocli);

        atualizar.setText("Atualizar");
        atualizar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                atualizarActionPerformed(evt);
            }
        });
        cliente.add(atualizar);

        buscar.setText("Buscar");
        cliente.add(buscar);

        excluir.setText("Excluir");
        cliente.add(excluir);
        cliente.add(jSeparator1);

        sair.setText("Sair");
        sair.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                sairActionPerformed(evt);
            }
        });
        cliente.add(sair);

        jMenuBar1.add(cliente);

        jMenu2.setText("Edit");
        jMenuBar1.add(jMenu2);

        setJMenuBar(jMenuBar1);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 400, Short.MAX_VALUE)
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 279, Short.MAX_VALUE)
        );

        pack();
    }// </editor-fold>                        

    private void atualizarActionPerformed(java.awt.event.ActionEvent evt) {                                          
       
    

    }                                         

    private void sairActionPerformed(java.awt.event.ActionEvent evt) {                                     
      System.exit(0);
    }                                    

    private void cadastrocliActionPerformed(java.awt.event.ActionEvent evt) {                                            
           //Código acrescentado!
               Cadastro cadastro = new Cadastro();
               add(cadastro);
               repaint();
         
                
    }                                           

 
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new TelaPrincipal().setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify                     
    private javax.swing.JMenuItem atualizar;
    private javax.swing.JMenuItem buscar;
    private javax.swing.JMenuItem cadastrocli;
    private javax.swing.JMenu cliente;
    private javax.swing.JMenuItem excluir;
    private javax.swing.JMenu jMenu2;
    private javax.swing.JMenuBar jMenuBar1;
    private javax.swing.JPopupMenu.Separator jSeparator1;
    private javax.swing.JMenuItem sair;
    // End of variables declaration                   

}

Porém não funcionou! Onde estou errando?

Grato!

gqferreira

É um pouco confuso (para mim) o codigo do netbeans, nunca usei esse gerenciador de layoute mas acredito que o problema esteja no meio de como o painel é adicionado ao frame devido ao gerenciador de layout.

Criado 4 de abril de 2010
Ultima resposta 4 de abr. de 2010
Respostas 5
Participantes 2