Não consigo entender pq não está setando

Olá estou tentando fazer com que o programa imprima as informações com JOptionPane ainda vou resolver o lance do atibuto “sexo” mas os atributos Nome e idade Quando fui testar ainda esta em nulo, podem me ajudar?

Janela

public class Janela extends JFrame{
    
    private JPanel jp;
    private JLabel nome;
    private JLabel sexo;
    private JLabel idade;
    private JLabel rotulo;
    private JTextField textNome;
    private JFormattedTextField textIdade;
    private JButton prosseguir;
    private JRadioButton F;
    private JRadioButton M;
    private JRadioButton O;
    private ButtonGroup grupo;
    private Font grande = new Font("Arial",Font.BOLD, 20);
    private Font padrao = new Font("Arial",Font.BOLD,12);
    private JComboBox box;
    
    public Janela(){
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setLocationRelativeTo(null);
        setResizable(false);
        setVisible(true);
    }
    
    public JPanel getJp() {
        return jp;
    }
    public void setJp(JPanel jp) {
        this.jp = jp;
    }
    public JLabel getNome() {
        return nome;
    }
    public void setNome(JLabel nome) {
        this.nome = nome;
    }
    public JLabel getSexo() {
        return sexo;
    }
    public void setSexo(JLabel sexo) {
        this.sexo = sexo;
    }
    public JLabel getIdade() {
        return idade;
    }
    public void setIdade(JLabel idade) {
        this.idade = idade;
    }
    public JLabel getRotulo() {
        return rotulo;
    }
    public void setRotulo(JLabel rotulo) {
        this.rotulo = rotulo;
    }
    public JTextField getTextNome() {
        return textNome;
    }
    public void setTextNome(JTextField textNome) {
        this.textNome = textNome;
    }
    public JFormattedTextField getTextIdade() {
        return textIdade;
    }
    public void setTextIdade(JFormattedTextField textIdade) {
        this.textIdade = textIdade;
    }
    public JButton getProsseguir() {
        return prosseguir;
    }
    public void setProsseguir(JButton prosseguir) {
        this.prosseguir = prosseguir;
    }
    public JRadioButton getF() {
        return F;
    }
    public void setF(JRadioButton F) {
        this.F = F;
    }
    public JRadioButton getM() {
        return M;
    }
    public void setM(JRadioButton M) {
        this.M = M;
    }
    public JRadioButton getO() {
        return O;
    }
    public void setO(JRadioButton O) {
        this.O = O;
    }
    public ButtonGroup getGrupo() {
        return grupo;
    }
    public void setGrupo(ButtonGroup grupo) {
        this.grupo = grupo;
    }
    public Font getGrande() {
        return grande;
    }
    public void setGrande(Font grande) {
        this.grande = grande;
    }
    public Font getPadrao() {
        return padrao;
    }
    public void setPadrao(Font padrao) {
        this.padrao = padrao;
    }
    public JComboBox getBox() {
        return box;
    }
    public void setBox(JComboBox box) {
        this.box = box;
    }
}

Classe que deveria setar os valores

public class Informacao extends Janela {
    
    Eleitor eleitor = new Eleitor();
    
    public Informacao(){
        setTitle("Votação");
        
        //Criaçao e formataçaõ do JPanel
        setJp(new JPanel());
        getJp().setLayout(null);
        getJp().setSize(300,300);
        
        //Manipulando is JLabel
        setRotulo(new JLabel("Sistema Votação"));
        getRotulo().setBounds(60, 0, 300, 55);
        getRotulo().setFont(getGrande());
        
        setNome(new JLabel("Nome: "));
        getNome().setFont(getPadrao());
        getNome().setBounds(0, 50, 50, 50);
        
        setSexo(new JLabel("Sexo: "));
        getSexo().setFont(getPadrao());
        getSexo().setBounds(0, 90, 50, 50);
        
        setIdade(new JLabel("Idade: "));
        getIdade().setFont(getPadrao());
        getIdade().setBounds(0, 130, 50, 50);
        
        //Maniúlando JTextField
        setTextNome(new JTextField());
        getTextNome().setBounds(100, 65, 175, 20);
        
        MaskFormatter mascaraData;
        try {
            mascaraData = new MaskFormatter("##");
            setTextIdade(new JFormattedTextField(mascaraData));
            getTextIdade().setBounds(100, 145, 175, 20);
        } catch (ParseException ex) {
            System.out.print("Erro");
        }
        
        //Manipulando JRadioButton
        setF( new JRadioButton("F"));
        getF().setFont(getPadrao());
        getF().setBounds(100, 105, 35, 35);
        
        setM( new JRadioButton("M"));
        getM().setFont(getPadrao());
        getM().setBounds(140, 105,35, 35);
        
        setO( new JRadioButton("X"));
        getO().setFont(getPadrao());
        getO().setBounds(180, 105,35, 35);
        
        setGrupo(new ButtonGroup());
        getGrupo().add(getF());
        getGrupo().add(getM());
        getGrupo().add(getO());
        
        //Manipulando JRadioButton
        setProsseguir(new JButton(">>Prosseguir"));
        getProsseguir().setFont(getPadrao());
        getProsseguir().setBounds(80, 225, 120, 30);
        getProsseguir().addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
                                eleitor.dados();
                                //dispose();
				//Votacao votar = new Votacao();
				
			}
		});
        
        add(getJp());
        getJp().add(getRotulo());
        getJp().add(getNome());
        getJp().add(getSexo());
        getJp().add(getIdade());
        getJp().add(getTextNome());
        getJp().add(getTextIdade());
        getJp().add(getF());
        getJp().add(getM());
        getJp().add(getO());
        getJp().add(getProsseguir());
        setLayout(null);
        setSize(300,300);

    } 
    
}

Classe eleitor

import QuestaoTres.Janela;
import javax.swing.JFormattedTextField;
import javax.swing.JOptionPane;
import javax.swing.JRadioButton;
import javax.swing.JTextField;

public class Eleitor extends Janela {
    private JTextField nome;
    private JRadioButton  sexo;
    private JFormattedTextField idade;
    
    public Eleitor(){
        nome = getTextNome();
        idade = getTextIdade();
    }

    public void dados(){
        JOptionPane.showMessageDialog(null, "\nNome: " + nome + "\nIdade: " + idade + "\nSexo: " + 
        sexo);
    }
    
}

Main

public class testes {
    public static void main(String[] args){
        Informacao i = new Informacao();
    }
}

Desde quando um eleitor é uma janela?

1 curtida

eu estava querendo pegar

nome = getTextNome();
idade = getTextIdade();

alguma sugestão?

No caso você pode resolver isso de duas formas, pegando uma variável Janela inicializada e puxar esses métodos ou então torne eles métodos statics e você poderá acessar utilizando

Janela.getTextNome();

Mas o mais interessante seria você ter uma variável do tipo Janela e depois você ir puxando informações dessa inicialização que provavelmente seu código já faz, mas não é atribuida a uma variável.

Seria ± assim:

Janela janela1 = new Janela();
//Depois acesse normalmente
janela1.getTextNome();

Fiz a alteração e apesar do codigo ter ficado bem melhor assim ainda n consigo que ele retorne os valores inseridos.
Todo o resto permanece da mesma forma só mudei o recomendado

  • Alteração da classe Eleitor

public class Eleitor{

private JTextField nome;
private JRadioButton  sexo;
private JFormattedTextField idade;

Janela janela = new Janela();

public Eleitor(){
    nome = janela.getTextNome();
    idade = janela.getTextIdade();
}

public void dados(){
    JOptionPane.showMessageDialog(null, "\nNome: " + nome + "\nIdade: " + idade + "\nSexo: " + sexo);
}

}

Amigo o que eu falei em cima foi apenas um exemplo, você tem que implementar isso de acordo com seu código, eu não escrevi pois não sei como foi programado e como funciona.

Quando você está inicializando essa instância da classe Janela, essa instância é a mesma que o usuário interage na interface? Você tem certeza que ao inicializar a classe Eleitor as informações da variável Janela já foram inicializadas?

então o programa inicia na classe Informação, nela esta sendo inicializado os atributos de janela ai quando vou pra o eleitor estou instanciando janela e tentando setar :
nome = janela.getTextNome();
idade = janela.getTextIdade();

Eleitor eleitor = new Eleitor();
Você tem essa inicialização dentro da classe Informação, ou seja, antes mesmo de inicializar a classe Janela (isso é feito na sua classe Informação) você já está tentando acessar informações, e pela lógica sempre vai ser nula qualquer informação afinal você está instanciando um antes do outro.
Eleitor eleitor = new Eleitor();
Deve ficar após a instancia da classe Janela pelo que eu estou entendendo.

1 curtida

Entendi !!! sempre ia nulo pois sempre que informação iniciava o criava um novo

Retirando ele coo eu faço pra que nome e a idade o eleitor receba o JTextField nome, JRadioButton sexo e o JFormattedTextField idade que é dado pelo usuario na classe informaçao?

Você não precisa retirar, apenas colocar ele para que inicie depois da Janela. É uma questão de ordem e localização no código.

Você não tem como acessar uma informação que não foi iniciada antes porque se não foi iniciada significa que é nula e outra, você deve acessar a mesma variável que você inicialmente tinha instanciado e não criar uma nova usando a mesma classe.