Sobre eventos

Oi gente, nessa classe abaixo:

package exemplos;

import javax.swing.*;

import java.awt.event.*;

public class Frm04 implements ActionListener{
	
	JFrame f = new JFrame(); 
	JPanel pl = new JPanel(); //Contêiner
	JLabel lblIdCategoria = new JLabel("Código:");
	JTextField txtIdCategoria = new JTextField("");
	JButton cmdExcluir = new JButton("Excluir");
	JLabel lblStatus = new JLabel("Status:");
	
	void criarTela (){
		
		//Configurações da tela:
		f.setSize(300, 170);
		f.setLocation(150, 200);
		f.setTitle("Cadastro de categorias");
		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);		
		pl.setLayout(null);
		
		//Posição dos objetos na tela:
		lblIdCategoria.setBounds(10, 10, 60, 20); // (x, y, width, height)
		txtIdCategoria.setBounds(100, 10, 35, 20); // (x, y, width, height)
		cmdExcluir.setBounds(190, 70, 80, 20); // (x, y, width, height)
		lblStatus.setBounds(10, 100, 200, 20); // (x, y, width, height)
		
		//Adicionando manipuladores de eventos:
		cmdExcluir.addActionListener(this);
		
		//Adicionando os objetos ao painel:
		pl.add(lblIdCategoria);
		pl.add(txtIdCategoria);
		pl.add(cmdExcluir);
		pl.add(lblStatus);
		
		//Adicionando o painel ao formulário:
		f.add(pl);
		
		f.setVisible(true);
		
	}
	
	public void actionPerformed(ActionEvent e){
		Object o = e.getSource();
		if(o == cmdExcluir){
			excluir();
		}
	}
	
	void excluir() {
		lblStatus.setText("Código: " + txtIdCategoria.getText() + " excluído. ");
	}

}
  1. Na linha 32, esse “this” é que chama o método “actionPerformed” ?

  2. Dentro do método “actionPerformed”, esse método getSource() retorna o objeto que foi clicado e depois essa informação torna-se valor do objeto “o” da clase Object?

  3. Dentro do método excluir(), o método getText() retorna o texto que eu digitar dentro da caixa de texto “txtIdCategoria” ?

Obrigada pela atenção

Não. Quem chama o actionPerformed é o btnExcluir. O método actionPerformed de “this” é chamado.

Sim. Entretanto, é uma má prática testar o getSource() com ==. O ideal é registrar um ActionListener diferente para cada botão.

Sim.

Movido para o fórum de Interface Gráfica.
Por favor, leia atentamente a descrição dos fóruns antes de postar.

Muito obrigada Vini :slight_smile:
Vou ler sim, pode deixar.

Se eu colocar esse método na classe

cmdExcluir.addActionListener(this);

ele vai pedir para implementar a interface ActionLister, correto?
Agora minha dúvida é o seguinte. Eu coloquei esse método assim:

cmdExcluir.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e){ Object o = e.getSource(); if(o == cmdExcluir){ excluir(); } } });

Aqui estou dizendo que para ele executar direto a interface??

Não. Você está criando uma classe interna anônima. É uma classe que implementa ActionListener.

Note que se você for fazer dessa forma, só o excluir terá esse actionListener e, portanto, não é necessário testar a origem do evento. O que simplifica a implementação do método para:

cmdExcluir.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e){ excluir(); } });

Isso garante mais performance e código menos macarrônico. Quando você tem vários botões, concentrar tudo num listener só irá deixar seu código com um if gigantesco.

Entendi vlw :smiley: