Como chamar método void dentro de um .add() de um JPanel

8 respostas
N

Tenho a classe Perfil.java que tem o trecho de código abaixo. Esse trecho é um JPanel que faz parte do conjunto de 3 abas. Tenho que inserir mais labels e textfield e pra não colocar todos eles manualmente fui aconselha a usar o método do 2º código. O que não consigo entender é como que vou chamar o método do 2º código dentro de um panel3.add(), já que isso não é possível. Obrigada.

public void initComponent() {
        setSize(850, 550);
        setTitle("Perfil");

        final DAOGenerico<Pessoa> daoPessoa = new DAOGenerico<Pessoa>(Pessoa.class);
        final DAOGenerico<Pais> daoPais = new DAOGenerico<Pais>(Pais.class);
        final DAOGenerico<Estado> daoEstado = new DAOGenerico<Estado>(Estado.class);

        Pessoa pessoa = daoPessoa.obter(idE);

        Container cp = new Container();
        cp = getContentPane();
        cp.setLayout(new BorderLayout());

// Aba 3 configuracoes

       JPanel panel3 = new JPanel();
        GridBagConstraints cons = new GridBagConstraints();
        GridBagLayout layout = new GridBagLayout();
        panel3.setLayout(layout);

        cons.fill = GridBagConstraints.BOTH;
        cons.insets = new Insets(5, 0, 5, 0);
        cons.ipadx = 20;
        cons.ipady = 1;

        JLabel labelNome = new JLabel("Nome:");
        JTextField tfNome = new JTextField(25);

        JLabel labelEmail = new JLabel("Email:");
        JTextField tfdEmail = new JTextField(25);

        tabbedPane.addTab("Configuracoes", null, panel3, "Third Panel");

        painelSul.add(tabbedPane);
        setVisible(true);
        setDefaultCloseOperation(DISPOSE_ON_CLOSE);
        setLocationRelativeTo(null);

        cp.add(painelSul, BorderLayout.CENTER);
    }
2º CÓDIGO
public void add(String label, JComponent componente, String label2, JComponent componente2) {
        GridBagConstraints cons = new GridBagConstraints();
        cons.fill = GridBagConstraints.BOTH;
        cons.insets = new Insets(4, 4, 4, 4);

        cons.fill = GridBagConstraints.NONE;
        cons.anchor = GridBagConstraints.NORTHWEST;
        cons.weightx = 0;
        cons.gridwidth = 1;
        this.getContentPane().add(new JLabel(label), cons);

        cons.weightx = 1;
        cons.gridwidth = 1;
        cons.fill = GridBagConstraints.BOTH;
        this.getContentPane().add(componente, cons);

        cons.fill = GridBagConstraints.NONE;
        cons.weightx = 0;
        cons.gridwidth = 1;
        this.getContentPane().add(new JLabel(label2), cons);

        cons.weightx = 1;
        cons.fill = GridBagConstraints.BOTH;
        cons.gridwidth = GridBagConstraints.REMAINDER;
        this.getContentPane().add(componente2, cons);
    }

8 Respostas

U

Nicolle KC no segundo código ele já adiciona o componente ao JPanel, não sendo mais preciso vc utilizar o método:

panel3.add(Component);

Para isso basta chamar o método na classe do Jpanel e vc deve passar como parâmetro o componente a ser adicionado ao panel. No segundo código ele adiciona através do método:

this.getContentPane().add(componente, cons); 
    this.getContentPane().add(componente2, cons);
N

coloquei o add("Nome: ", tfNome, "Email: ", tfdEmail); depois que criei o tfdEmail no 1º código, porém agora todas as 3 abas sumiram ;x

U

Nicolle KC é necessário verificar se vc está adicionando o método ao Jpanel e não ao JTabbedPane, tendo em vista que vc falou que está utilizando abas.

Sendo assim vc deve adicionar os componentes ao Jpanel, e por fim add o Jpanel ao JTabbedPane.

N

se eu colocar this.add("Nome1: ", tfNome, "Email1: ", tfEmail); o java entende que o “this” é do panel3? Pq na linha 33 do 1º código o panel3 está sendo add no JTabbedPane então, penso eu, que o “add solto” seria do panel3. Sou iniciante então desculpa pela minha dificuldade em entender kkkk

U

Nicolle KC o this a classe em uso.

Se possível, coloca todo o código para que possa visualizar.

N

Aqui está o código inteiro. Pra não tirar do código comentei as abas 1 e 2 que tbm estão com problemas de layout (ignore elas), mas estou arrumando a aba 3 primeiro.

package siteanime;

import Dao.DAOGenerico;
import entidades.Estado;
import entidades.Pais;
import entidades.Pessoa;
import java.awt.*;
import javax.swing.*;

public class PerfilJava extends JFrame {

    //Entrar é a tela de login
    Entrar entrar = new Entrar();
    int idE = entrar.getId();

    public void initComponent() {
        setSize(850, 550);
        setTitle("Perfil");

        final DAOGenerico<Pessoa> daoPessoa = new DAOGenerico<Pessoa>(Pessoa.class);
        final DAOGenerico<Pais> daoPais = new DAOGenerico<Pais>(Pais.class);
        final DAOGenerico<Estado> daoEstado = new DAOGenerico<Estado>(Estado.class);

        Pessoa pessoa = daoPessoa.obter(idE);

        Container cp = new Container();
        cp = getContentPane();
        cp.setLayout(new BorderLayout());

        //Painel Norte 

        JPanel painelNorte = new JPanel();
        painelNorte.setLayout(new GridLayout(1, 2));

        //Painel Esquerdo
        JPanel painelEsq = new JPanel();
        painelEsq.setLayout(new FlowLayout());
        JLabel imagem1 = new JLabel();
        imagem1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Figuras/caveira.jpg")));
        painelEsq.add(imagem1);

        //Painel Direito
        JPanel painelDir = new JPanel();
        painelDir.setLayout(new GridLayout(2, 1));
        JLabel label2 = new JLabel("Bem Vindo Administadror " + pessoa.getNome() + ", " + pessoa.getEstadoIdEstado().getNome() + " - " + pessoa.getPaisIdPais().getNome());
        painelDir.add(label2);

        painelNorte.add(painelEsq, BorderLayout.WEST);
        painelNorte.add(painelDir, BorderLayout.EAST);

        painelNorte.setSize(200, 300);
        setDefaultCloseOperation(DISPOSE_ON_CLOSE);
        setVisible(true);
        setLocationRelativeTo(null);

        cp.add(painelNorte, BorderLayout.NORTH);

        //Painel Sul
        JPanel painelSul = new JPanel();
        painelSul.setLayout(new FlowLayout());

        JTabbedPane tabbedPane = new JTabbedPane();
//// Aba 1: Controle de usuarios
//        JPanel panel1 = new JPanel();
//        panel1.setLayout(new GridLayout(7, 1));
//        JLabel label4 = new JLabel("Nome completo do contato:");
//        panel1.add(label4);
//        JTextField textFieldNome = new JTextField(25);
//        panel1.add(textFieldNome);
//        JLabel label5 = new JLabel("Tipo do contato:");
//        panel1.add(label5);
//        JComboBox comboBoxStatus = new JComboBox(new String[]{"Ativo", "Inativo"});
//        comboBoxStatus.setPreferredSize(new Dimension(390, 20));
//        panel1.add(comboBoxStatus);
//        JLabel label = new JLabel("Lista de Contatos:");
//        label.setPreferredSize(new Dimension(240, 20));
//        panel1.add(label);
//        JButton buttonProcurar = new JButton("Procurar");
//        buttonProcurar.setPreferredSize(new Dimension(140, 25));
//        panel1.add(buttonProcurar);
//
//        tabbedPane.addTab("Usuarios", null, panel1, "First Panel");
//
//// Aba 2: Albuns
//
//        JPanel panel2 = new JPanel();
//        panel2.setLayout(new GridLayout(3, 4, 5, 6));
//        JLabel imagem11 = new JLabel();
//        imagem11.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Figuras/caveira.jpg")));
//        panel2.add(imagem11);
//        JLabel imagem2 = new JLabel();
//        imagem2.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Figuras/caveira - Cópia.jpg")));
//        panel2.add(imagem2);
//        JLabel imagem3 = new JLabel();
//        imagem3.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Figuras/caveira - Cópia (2).jpg")));
//        panel2.add(imagem3);
//        JLabel imagem4 = new JLabel();
//        imagem4.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Figuras/caveira - Cópia (3).jpg")));
//        panel2.add(imagem4);
//        JLabel imagem5 = new JLabel();
//        imagem5.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Figuras/caveira - Cópia (4).jpg")));
//        panel2.add(imagem5);
//
//        tabbedPane.addTab("Albuns", null, panel2, "Second Panel");

 //Aba 3? configuracoes

        JPanel panel3 = new JPanel();
        panel3.setLayout(new GridLayout(9, 2));
        
        JLabel labelNome = new JLabel("Nome:");
        JTextField tfNome = new JTextField(25);

        JLabel labelEmail = new JLabel("Email:");
        JTextField tfEmail = new JTextField(25);
        
        add("Nome: ", tfNome, "Email: ", tfEmail); 
        
        tabbedPane.addTab("Configuracoes", null, panel3, "Third Panel");

        painelSul.add(tabbedPane);
        setVisible(true);
        setDefaultCloseOperation(DISPOSE_ON_CLOSE);
        setLocationRelativeTo(null);

        cp.add(tabbedPane, BorderLayout.CENTER);
    }

    public void add(String label, JComponent componente, String label2, JComponent componente2) {
        GridBagConstraints cons = new GridBagConstraints();
        cons.fill = GridBagConstraints.BOTH;
        cons.insets = new Insets(4, 4, 4, 4);

        cons.fill = GridBagConstraints.NONE;
        cons.anchor = GridBagConstraints.NORTHWEST;
        cons.weightx = 0;
        cons.gridwidth = 1;
        this.getContentPane().add(new JLabel(label), cons);

        cons.weightx = 1;
        cons.gridwidth = 1;
        cons.fill = GridBagConstraints.BOTH;
        this.getContentPane().add(componente, cons);

        cons.fill = GridBagConstraints.NONE;
        cons.weightx = 0;
        cons.gridwidth = 1;
        this.getContentPane().add(new JLabel(label), cons);

        cons.weightx = 1;
        cons.fill = GridBagConstraints.BOTH;
        cons.gridwidth = GridBagConstraints.REMAINDER;
        this.getContentPane().add(componente2, cons);
    }
    
        public PerfilJava() {
        initComponent();
    }

        public static void main(String[] args) {
        PerfilJava e = new PerfilJava();
        e.setVisible(true);
    }
}
U

Nicolle KC dei uma olhada no teu código.

Olha o this neste caso está se referenciado a classe principal estendida do Jframe. Porém desta forma vc estará adicionando os componentes ao JFrame e não ao Jpanel.

Para isto faça o seguinte, vc pode fazer algumas alterações no método add a fim de passar como um dos parâmetros um objeto do tipo Jpanel.

FIcando assim:

public void add(String label, JComponent componente, String label2, JComponent componente2,JPanel panel) {  
       GridBagConstraints cons = new GridBagConstraints();  
       cons.fill = GridBagConstraints.BOTH;  
       cons.insets = new Insets(4, 4, 4, 4);  
 
       cons.fill = GridBagConstraints.NONE;  
       cons.anchor = GridBagConstraints.NORTHWEST;  
       cons.weightx = 0;  
       cons.gridwidth = 1; 
       
       //Add componente ao Jpanel
       panel.add(new JLabel(label), cons);  
 
       cons.weightx = 1;  
       cons.gridwidth = 1;  
       cons.fill = GridBagConstraints.BOTH;  
      
       //Add componente ao Jpanel
       panel.add(componente, cons);  
 
       cons.fill = GridBagConstraints.NONE;  
       cons.weightx = 0;  
       cons.gridwidth = 1;  
       
       //Add componente ao Jpanel
       panel.add(new JLabel(label), cons);  
 
       cons.weightx = 1;  
       cons.fill = GridBagConstraints.BOTH;  
       cons.gridwidth = GridBagConstraints.REMAINDER;  

       //Add componente ao Jpanel
       panel.add(componente2, cons);  
   }
N

muito obrigado urbgames, nunca tinha passaado pela minha cabeça de colocaro JPanel como paramentro kk agora o código funcionou perfeitamente (:

Criado 8 de maio de 2013
Ultima resposta 9 de mai. de 2013
Respostas 8
Participantes 2