Eventos de botões

E aí galera, beleza?

Estou com dúvidas sobre eventos de botão. Utilizei o ActionListener em sala de aula. Criei uma classe ouvinte para os botões, mas quando cheguei em casa, não consegui acertar como fazer. Pesquisei em diversos sites, e cada um fala de uma forma diferente, complicando cada vez mais o meu entendimento. Eu queria saber se alguém pode me ajudar nessa dúvida.

Bom, eu criei uma classe onde fica minha janela, é uma tela simples de login, na qual desejo fazer uma verificação através de “if / else”. Criei outra, onde coloquei o método main, apenas para testar a janela. Eu não consegui adicionar o evento ao botão. Criei uma classe ouvinte, mas não consigo fazer com que o botão apresente algum comportamento após o clique.

Segue abaixo as classes que criei.

Classe da janela

[code]package br.com.telas;
import java.awt.BorderLayout;
import java.awt.GridLayout;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.border.TitledBorder;

public class TelaLogin{

public void novaJanela(){
//instâncias de frames, layots e panels
JFrame janelaLogin = new JFrame("Login");
GridLayout grid = new GridLayout(3, 2);
BorderLayout border = new BorderLayout();
JPanel painelLogin = new JPanel(grid);
JPanel painelPrincipal = new JPanel(border);
TitledBorder bordaLogin = new TitledBorder(BorderFactory.createLoweredBevelBorder(), "Informações do usuário", 1, 1);

//instância de componentes
JLabel lblNome = new JLabel("Usuário");
JLabel lblSenha = new JLabel("Senha");
JTextField txtLogin = new JTextField();
JTextField txtSenha = new JTextField();
JButton btoLogin = new JButton("Login");
JButton btoCancel = new JButton("Cancelar");

//métodos do frame e panel
janelaLogin.setSize(300, 100);
janelaLogin.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
painelLogin.setBorder(bordaLogin);
	
//adição de componentes ao panel e ao frame
janelaLogin.add(painelLogin);
painelLogin.add(lblNome);
painelLogin.add(txtLogin);
painelLogin.add(lblSenha);
painelLogin.add(txtSenha);
painelLogin.add(btoLogin);
painelLogin.add(btoCancel);

	
janelaLogin.setVisible(true);

}

}[/code]

Classe para teste

[code]package br.com.telas;

public class TestaLogin {

public static void main(String[] args) {
	

	TelaLogin refLogin = new TelaLogin();
	
	refLogin.novaJanela();
	
	
}

}
[/code]

Classe ouvinte

[code]package br.com.controle;

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

import javax.swing.JFrame;
import javax.swing.JOptionPane;

public class OuvinteBotao extends JFrame implements ActionListener {

@Override
public void actionPerformed(ActionEvent e) {
	
	JOptionPane.showMessageDialog(null, "Seja bem vindo!");
			
}

}[/code]

Eu queria saber como inserir isso na classe da janela de forma que ao clicar no botão ele mostre essa mensagem. E se possível, gostaria de saber como posso fazer uma verificação usando if e else para que ele retorne uma mensagem diferente caso o que for digitado no campo não seja igual.

Uma última dúvida:

É possível criar na classe ouvinte métodos ou classes internas que definam comportamentos para diferentes botões ou eu terei que cria separadamente uma classe pra cada evento de botão?

Desde já, obrigado e desculpe pelo enorme tópico ^^

Por favor, não marque tópicos com o óbvio, como as palavras [Dúvida] e [Ajuda]. Leia nosso guia de postagem:

[quote=ViniGodoy]Por favor, não marque tópicos com o óbvio, como as palavras [Dúvida] e [Ajuda]. Leia nosso guia de postagem:

Desculpa ae moderador, eu já havia lido o guia de postagem antes mesmo de postar meu primeiro tópico aqui no GUJ. Esse erro foi devido ao costume de outros forums que visito, nos quais preciso especificar o que estou precisando.

  1. Para que um evento seja associado a um botão, deve-se chamar o método addActionListener desse botão, passando uma instância de uma classe que implemente a interface ActionListener.
  2. O mais usado é criar uma classe anônima por botão, para que seja simples você, ao olhar o código, verificar que código está associado a que botão:
JButton botão1 = ...;
JButton botão2 = ...;
...
botão1.addActionListener (new ActionListener() {
    @Override  
    public void actionPerformed(ActionEvent e) {
       ...
...
botão2.addActionListener (new ActionListener() {
    @Override  
    public void actionPerformed(ActionEvent e) {
       ...
  1. Mas se você acha isso muito tosco, pode fazer uma de duas coisas:
    a) Fazer a sua própria classe implementar ActionListener, ou então uma outra classe implementar ActionListener, e na implementação de ActionListener você verificar que objeto invocou a ação usando e.getSource():
botão1.addActionListener (...);
botão2.addActionListener (...);
...
// A classe que implementa ActionListener tem um método como:
    @Override  
    public void actionPerformed(ActionEvent e) {
       if (e.getSource() == botão1) 
          ... coisas do botão 1
       else if (e.getSource() == botão2)
          ... coisas do botão 2

b) Mais ou menos a mesma coisa, só que sua classe tem N métodos (cada um para cada botão), que são invocados pelo método actionPerformed:

botão1.addActionListener (this);
botão2.addActionListener (this);
...
// A própria classe tem um método actionPerformed, e:
    @Override  
    public void actionPerformed(ActionEvent e) {
       if (e.getSource() == botão1) 
          botão1ActionPerformed(e);
       else if (e.getSource() == botão2)
          botão2ActionPerformed(e);
      ...
// Os métodos que realmente manipulam os eventos dos botões:
     private void botão1ActionPerformed (ActionEvent e) {
         // coisas que o botão 1 deve fazer
     }
     private void botão2ActionPerformed (ActionEvent e) {
         // coisas que o botão 2 deve fazer
     }

Valeu entanglement, vou fazer uns testes aqui e posto o resultado.