GUJ Discussões   :   últimos tópicos   |   categorias   |   GUJ Respostas

JLabel de outra classe na classe principal


#1

Estou escrevendo um código de formulário. Para não descarregar tudo no construtor(e ter um código enorme), eu resolvi criar classes diferentes. Em uma eu tenho o construtor. Na outra, apenas os objetos que aparecerão na tela de formulário. Eu quero adicionar os atributos da classe Componentes.java na classe principal.
Segue código da classe principal:
package sigeeic;

import java.awt.Font;
import java.awt.HeadlessException;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class SigEeic extends JFrame {    
    Componentes d = new Componentes();

    public SigEeic() throws HeadlessException {
        configuracaoDaJanela();
        d.lNome =  new JLabel("Nome do Aluno");
        add(d.lNome);
        setVisible(true);
    } public void configuracaoDaJanela() {
        setLayout(null);
        setSize(600, 300);
        setLocationRelativeTo(null);
        setTitle("Cadastro de Alunos - SCHool - CHLabs");
        setVisible(true);
         }
    

        
    
    public static void main(String[] args) {
        SigEeic s = new SigEeic();
        s.setDefaultCloseOperation(EXIT_ON_CLOSE);
    }
  
}

Agora, o da outra classe:
package sigeeic;

import java.awt.Font;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;

public class Componentes extends JFrame {

    public JLabel lNome = new JLabel("Nome do Aluno"), 
            lDataNascimentoo = new JLabel("Data de Nascimento"), 
            lSexo = new JLabel("Data Nascimento"), 
            lUF = new JLabel("UF");
    public JTextField tfNome;
    

    }

Help


#2

Boa noite amigo.

Separar o código só pq a classe estava ficando extensa não é muito bom, mas vc pode injetar o frame como dependência da classe Componentes e fazer o mesmo que fazia na classe SigEeeic.

public class SigEeic extends JFrame {
     private Componentes d;

     public SigEeic() throws HeadlessException {
           configuracaoDaJanela();
           setVisible(true);
    }

    private void initComponents() {
           d = new Componentes(this);
    }
}

public class Componentes {

    private final JFrame frame;
    private final JLabel lNome = new JLabel("Nome do Aluno"),
            lDataNascimentoo = new JLabel("Data de Nascimento"),
            lSexo = new JLabel("Data Nascimento"),
            lUF = new JLabel("UF");
    private JTextField tfNome;

    public Componentes(JFrame frame) {
        this.frame = frame;
        initComponents();
    }

    //adiciona os componentes no formulário
    private void initComponents() {
        add(lNome);
    }
}

Na verdade é a mesma coisa só que de uma classe externa e isso só faria sentido mesmo se fosse para poder reutilizar o código em outro frame, porém, iria ficar igual o primeiro então não tem pq ter uma classe externa só para construir o frame e deixa a classe de construção menor.

Contudo espero que isso te ajude. :smiley:


#3

Se os atributos são da classe Componentes, porque você precisa declará-los na classe Principal.
A classe Principal não possui instâncias da classe Componentes?