Ajuda!

Por que o botão não esta funcionando ?, não entra no if ?

import javax.swing.;
import java.awt.
;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class Calculo extends JFrame implements ActionListener{
JLabel nome;
JButton btn;
JTextField txt;
Calculo()
{
super(“Mandar Nome”);
JLabel nome = new JLabel ("Nome: ");
JTextField txt = new JTextField (50);
JButton btn = new JButton(“Mandar Nome”);
setLayout(new FlowLayout());
add(nome);
add(txt);
add(btn);
setVisible(true);
pack();
btn.addActionListener(this);

}
public static void main(String[] args) {
	// TODO Auto-generated method stub

Calculo c = new Calculo();
}

@Override
public void actionPerformed(ActionEvent e) {
	// TODO Auto-generated method stub
	if(e.getSource()==btn)
	{
		txt.setText("");
	}
}

}

Objetos se comparam com equals, tente e.getSource().equals(btn) (ainda não sei se entrará no if, pois não sei o que o e.getSource() retorna)

Obs: seja mais claro no título do seu tópico e ao postar código, deixe o código todo com a tag

No caso dele ele está certo em comparar com == pois ele quer comparar a referência.

O botão funciona perfeitamente, não está entrando no if pois você está testando se o getSource() do evento é a variável de instância btn, entretanto em lugar nenhum você inicializou a variável de instância btn.

Aliás, nenhuma das variáveis de instância foi inicializada, ao invés disso você criou variáveis locais dentro do construtor.

Dica, não é legal sua classe implementar o ActionListener, dessa forma você tem que ficar fazendo if pra saber quem disparou algum evento. O ideal é criar um listener para cada tratamento de evento.

Eu dei uma refatorada no seu código, veja como fica mais simples:

import java.awt.FlowLayout;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;

public class Calculo extends JFrame {

	public static void main(String[] args) {
		Calculo janelaCalculo = new Calculo();
		janelaCalculo.setVisible(true);
	}

	JLabel nome;
	JButton btn;
	JTextField txt;

	Calculo() {
		super("Mandar Nome");
		nome = new JLabel("Nome: ");
		txt = new JTextField(50);
		btn = new JButton("Mandar Nome");
		setLayout(new FlowLayout());
		add(nome);
		add(txt);
		add(btn);
		pack();

    	// usando uma expressão lâmbda pra tratar o evento quando este botão for pressionado
		btn.addActionListener(event -> pressionouBotaoMandarNome());
	}

	// este método será invocado sempre que pressionar o botão "Mandar Nome"
	private void pressionouBotaoMandarNome() {
		// assim não precisa de if nenhum
		txt.setText("");
	}
}
1 curtida