Conteudo do JPanel nao aparece no JTabbedPane! Apenas a nova Aba!

5 respostas
S

Pessoal, Tenho um JFrame, um JLayeredPane, uma JTabbedPane e um JPanel. Um dentro do outro nessa ordem.
O problema eh adicionar mais um JPanel atraves de um MenuItem no JTabbedPane!!!
Ele esta adicionando a aba, porem o conteudo do JPanel nao esta aparecendo!!
Ambos estao em null layout.
Alguem tem alguma ideia, alguma pista de porque apenas o conteudo do JPanel nao aparece, enquanto a aba aparece???

// Esta eh a minha Classe JFrame, que chama a Classe do JPanel para adicionar!!
package Formularios;

import javax.*;
import java.awt.*;

public class principal extends javax.swing.JFrame {
    public principal() {
        initComponents();
    }

    private void initComponents() {
        
        
        jTabbedPane1 = new  JTabbedPane();
        jPanel1 = new JPanel();
        jPanelCli = new JPanel();
        jLayeredPane1 = new JLayeredPane();
        jMenuBar1 = new  JMenuBar();
        jMenu3 = new  JMenu();
        jMenuItemClientes = new JMenuItem();
       

        setDefaultCloseOperation( WindowConstants.DISPOSE_ON_CLOSE);
        
        setResizable(false);
        getContentPane().setLayout(null);

     
         jPanel1.setLayout(null); //este panel ja esta adicionado desde o inicio do JFrame.

        jTabbedPane1.addTab("tab1", jPanel1);
        
        getContentPane().add(jTabbedPane1);
        jTabbedPane1.setBounds(0, 150, 800, 510);
        jLayeredPane1.add(jTabbedPane1,  JLayeredPane.PALETTE_LAYER);
         
        
        getContentPane().add(jLayeredPane1);
        jLayeredPane1.setBounds(339, 10, 800, 660);
        jMenu3.setText("Abrir");

                                                                               //aqui esta o meu ActionListener do jMenuItemClientes
        jMenuItemClientes.setText("Clientes");
        jMenuItemClientes.addActionListener(new ActionListener() {
            public void actionPerformed( ActionEvent evt) {
                jMenuItemClientesActionPerformed(evt);
            }
        });

        jMenu3.add(jMenuItemClientes);
        jMenuBar1.add(jMenu3);
        setJMenuBar(jMenuBar1);

        java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
        setBounds((screenSize.width-1150)/2, (screenSize.height-720)/2, 1150, 720);
    }

                                                    //aqui esta o metodo para chamar o JPanel que esta na outra classe!

private void jMenuItemClientesActionPerformed( ActionEvent evt) {
        jPanelClientes painelClientes = new jPanelClientes();
        painelClientes.initComponents();
        jTabbedPane1.addTab("tab1", jPanelCli);
           
}
    
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new principal().setVisible(true);
            }
        });
    }
 
    private JLayeredPane jLayeredPane1;
    private JMenuBar jMenuBar1;
    private JMenu jMenu3;
    private  JMenuItem jMenuItemClientes;
    private JPanel jPanel1;
    JPanel jPanelCli;
    private JTabbedPane jTabbedPane1;
   
}
Esta eh a minha Classe do jPanel a ser adicionado.
package Formularios;

import javax.swing.*;


public class jPanelClientes {
    
    public JLabel jLabel1;    
    public TextField textField1;
    public JPanel jPanelCli;

    public jPanelClientes() {
        initComponents();
    }


    public void initComponents() {
        jPanelCli = new JPanel();
        jLabel1 = new JLabel();
        textField1 = newTextField();
        
        jPanelCli.setLayout(null);
      
        jLabel1.setText("Empresa");
        jPanelCli.add(jLabel1);
        jLabel1.setBounds(10, 10, 41, 14);


        textField1.setText("textField1");
        jPanelCli.add(textField1);
        textField1.setBounds(620, 310, 150, 20);

    }
   
  }

5 Respostas

lina

Oi,

De uma olhada aqui:

private void jMenuItemClientesActionPerformed( ActionEvent evt) {   
        jPanelClientes painelClientes = new jPanelClientes();   
        painelClientes.initComponents();   
        jTabbedPane1.addTab("tab1", jPanelCli);   
             
}

Você está chamando a sua classe jPanelClientes e depois não está fazendo nada com ela...
quando você executa o método initComponents(); você só está criando eles, e não adicionando em nenhum lugar.

Obs: Procure coloca o nome de suas classes com a primeira letra sempre maiuscula. ok ?

Tchauzin

S
private void jMenuItemClientesActionPerformed( ActionEvent evt) {     
          jPanelClientes painelClientes = new jPanelClientes();     
           painelClientes.initComponents();     
            jTabbedPane1.addTab("tab1", jPanelCli);     
                   
    }

deveria ficar assim entao??

jTabbedPane1.addTab("tab1", painelClientes.initcomponents());
lina

Oi,

Na verdade o addTab() aceita por default 2 argumentos, uma String e um component.

Você precisa criar uma inner-class ou chamar a sua classe diretamente -> new jPanelClientes().
Porém a mesma deverá ter um extends de algum componente.

Tá, assim ó:

public class jPanelClientes extends JScrollPane
{   	       
	public JLabel jLabel1;       
	public TextField textField1;   
	public JPanel jPanelCli;   
	  
	public jPanelClientes() 
	{   
	        initComponents();   
	}   
	  
	public void initComponents() 
	{   
		jPanelCli = new JPanel(new BorderLayout());
	        jLabel1 = new JLabel();   
	        textField1 = new TextField();   
	           
	        jPanelCli.setLayout(null);   
	         
	        jLabel1.setText("Empresa");   
	        jPanelCli.add(jLabel1);   
	        jLabel1.setBounds(10, 10, 41, 14);   
	  
	  
	        textField1.setText("textField1");   
	        jPanelCli.add(textField1);   
	        textField1.setBounds(620, 310, 150, 20);   
	        
	        //
	        // Define seu scroll, adcionando no novo painel.
	        //
	        setViewportView(jPanelCli);
	        
	}   	     
}

e chame desta forma:

private void jMenuItemClientesActionPerformed( ActionEvent evt) {   	       
       jTabbedPane1.addTab("tab1", new jPanelClientes());   
}

OBS: Só fiz apareceber, agora de uma boa melhorada ai!

S

Grande Lina, sabe tudo essa mmulher!!!

S

Deu certinho eu extendi para uma classe JPanel msm e deu certo…Valeu…

public class JFormClientes extends JPanel {
.....
}

pra que serve esse

que vc adicionou no fim ??

e esse borderLayout para o JPanel??

jPanelCli = new JPanel(new BorderLayout());
Criado 9 de fevereiro de 2009
Ultima resposta 9 de fev. de 2009
Respostas 5
Participantes 2