getText() em um JTextField Não funcionando(código)

Alguém saberia me dizer porque o que está em vermelho no código não tá funcionando???, quando mando executar e clico no botão para gerar o evento, o que está escrito no textfield não aparece, mas o teste nova do system.out…println da classe controleDistribuidor aparece

*Pode deixar que não é chaves, se eu deixei de colocar chaves aqui foi no ctrl+c e v

código abaixo
------------------Distribuidor--------------------
public class Distribuidores extends javax.swing.JPanel
{
public ActionListener listener;
public Distribuidores()
{
GridBagLayout thisLayout = new GridBagLayout();
this.setBackground(Color.LIGHT_GRAY);
thisLayout.columnWeights = new double[] { 0.1, 0.1 };
thisLayout.columnWidths = new int[] { 7, 7 };
thisLayout.rowWeights = new double[] { 0.1, 0.1, 0.1, 0.1, 0.1,
0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1 };
thisLayout.rowHeights = new int[] { 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7 };
this.setLayout(thisLayout);

    listener = new ControleDistribuidor();

CampoNome = new JTextField();
this.add(CampoNome, new GridBagConstraints(1, 2, 1, 1, 0.0,
0.0, GridBagConstraints.LINE_START,
GridBagConstraints.NONE, new Insets(0, 5, 0, 0), 0, 0));
CampoNome.setPreferredSize(new java.awt.Dimension(200, 20));

BConfirmaDis = new JButton();
this.add(BConfirmaDis, new GridBagConstraints(0, 12, 1, 1, 0.0,
0.0, GridBagConstraints.LINE_END,
GridBagConstraints.NONE, new Insets(0, 0, 0, 0), 0, 0));
BConfirmaDis.setText(“OK”);
BConfirmaDis.setFont(new java.awt.Font(“Arial Black”, 1, 16));
[color=“green”]BConfirmaDis.setActionCommand(“btConfirmaNovo”);
BConfirmaDis.addActionListener(listener);[/color]
}
public JButton getBConfirmaDis()
{
return BConfirmaDis;
}
public JTextField getCampoNome()
{
return CampoNome;
}
}
-----------------ControleDistribuidor-------------------------
public class ControleDistribuidor implements ActionListener
{
Distribuidores Distr2;

public String texto = new String(“nada”);

public ControleDistribuidor()
{
   
}
		
		
public void actionPerformed(ActionEvent evt)
{    
    
    if(evt.getActionCommand().equals("btConfirmaNovo"))
    {
     
        Distr2 = new Distribuidores();
        System.out.println("teste nova"); 
        [color="red"]texto = Distr2.getCampoNome().getText();
       
       System.out.println("Campo nome é: " + texto);[/color]
        
     }
} 

}

você não declarou o objeto “TEXTO”, por isso ele não pode receber um valor muito menos imprimi-lo!

Claro que declarei, instanciei e ainda inicializei…

ah… eu nao tinha visto ela lá no inicio da classe…

duas alternativas pra se tentar:

declare “private String texto = new String(“nada”);”
ou declare “String texto = new String(“nada”);” dentro do método que você irá usa-lo!

cara cola a mensagem do erro pra gente ver

acho que fica melhor

[]'s

O pior que não dá erro nenhum… simplesmente não aparece, o botão funciona quando clico, apenas o conteúdo do CampoNome não aparece…

Antes de qualquer coisa: quando for postar código, use as marcas Code no botão em cima da área de texto. Deixa o código mais legível.

Dito isso, creio que o problema é simples: você tem uma classe Distribuidores, que estende JPanel. Essa classe usa uma instância da classe ControleDistribuidor como ActionListener. Essa instância de ControleDistribuidor, por sua vez possui uma instância de Distribuidores, que é, a princípio, a mesma instância de Distribuidores que usa este ControleDistribuidor. Agora veja seu código:

classe Distribuidores: cria uma instância de ControleDistribuidor para usar como ActionListener. Até aqui beleza…

public class Distribuidores extends javax.swing.JPanel {
    public ActionListener listener; 
    // ...

    // usando um ControleDistribuidor como ActionListener. Toda vez que
    // um evento de ação for gerado, o método actionPerformed() desta
    // instância será chamado.
    listener = new ControleDistribuidor();

    // ...
    BConfirmaDis.addActionListener(listener);

classe ControleDistribuidor: interpreta os eventos de ação; neste caso, era para imprimir no prompt o texto digitado no campo de texto. Observe os comentários abaixo:

public class ControleDistribuidor implements ActionListener {
    Distribuidores Distr2;    // referência para a instância de Distribuidores
                              // que está usando este ControleDistribuidor,
                              // certo?
    public String texto = new String("nada");
    public ControleDistribuidor() {}

    public void actionPerformed(ActionEvent evt) {
        if(evt.getActionCommand().equals("btConfirmaNovo")) {
            // Opa! aqui está o erro: essa instância de Distribuidores que 
            // você está criando abaixo não é a que gerou o evento! Nessa 
            // instância o campo de texto não tem nada!
            
            Distr2 = new Distribuidores();
            System.out.println("teste nova");
            texto = Distr2.getCampoNome().getText();
            System.out.println("Campo nome é: " + texto);
        }
    }
}

Percebeu o bug? Seu ControleDistribuidor não está armazenando a referência do Distribuidores que o usa: em outras palavras, ele não sabe quem está gerando o evento, e portanto não sabe de onde pegar o texto que você quer. Resolver isso é simples: o ControleDistribuidor tem que saber quem está o usando, correto? Então passa essa informação para ele quando for construí-lo, via construtor. Segue abaixo o código de ControleDistribuidor, corrigido:

public class Distribuidores extends JPanel {
    public ActionListener listener;
    
    // ...
    // agora o listener sabe quem está gerando os eventos
    listener = new ControleDistribuidor(this);

    // ...
}
public class ControleDistribuidor implements ActionListener {
    Distribuidores Distr2;    // referência para a instância de Distribuidores
                              // que está usando este ControleDistribuidor
    public String texto = new String("nada");
    
    // passando para Distr2 quem criou este ControleDistribuidor
    public ControleDistribuidor(Distribuidores d) { 
        Distr2 = d; 
    }

    public void actionPerformed(ActionEvent evt) {
        if(evt.getActionCommand().equals("btConfirmaNovo")) {
            System.out.println("teste nova");
            texto = Distr2.getCampoNome().getText();  // pode usar tranqüilo
            System.out.println("Campo nome é: " + texto);
        }
    }
}

Compile e rode isso que deve funcionar. Se não, a gente vê o que faz. Até mais,