Duvida com evento, me corrijam por favor caso estive errado ! [Resolvido]

11 respostas
R

Ao interagir com uma aplicação ocorre diverso eventos desde o caminhar do percurso do mouse até um clique em um componente. O SO encarrega-se de passar todos os eventos ocorrido para a JVM, que por sua vez verifica se existe Lista de Eventos para os eventos passado.
Por exemplo: Ao clicar em um botão a JVM verifica se existe alguns registro do componente que foi clicado na lista de eventos action (evento que foi gerado com o clique no botao)

so não entendi o seguinte para adicionar o botão a actionlistner passa o componente que será adicionado ?

botao.addActionListener(this);

porque isso é necessário ja que a JVM sabe o componente que gerou o evento ?

11 Respostas

rmendes08

Quando você adiciona um action listener você adicionar um tratador de eventos, e não um gerador. Ou seja, é o objeto que responderá ao evento, e não o evento que gera o evento.

nathanpsouza

não entendi muito bem a pergunta mas vamos lá.

Quando você associa um evento a um componente, você o faz pq não tem como a jvm saber oq vc quer executar quando tal evento for disparado por exemplo, para adicionar o evento de clique em um botao:

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

/**
 *
 * @author Nathan
 */
public class Teste extends JFrame{
    private JPanel p;
    private JButton b;

    public Teste() {
        super("Teste com eventos");
        this.init();
    }

    private void init() {
        p = new JPanel();
        b = new JButton("Teste");
        b.addActionListener(new ButtonEventListener());

        p.add(b);
        this.getContentPane().add(p);

        this.setSize(600,400);
        this.setVisible(true);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    private class ButtonEventListener implements ActionListener {
        public void actionPerformed(ActionEvent e){
            JOptionPane.showMessageDialog(null, "botao clicado");
        }
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run(){
                new Teste();
            }
        });
    }
}

vc deve passar um objeto que implementa a interface ActionListener, e implementar o método actionPerformed, não o componente que sera clicado :}

renzonuccitelli

Recomendo dar uma olhada no pattern Observer…

R

Obrigado rmendes08, nathanpsouza e renzonuccitelli

Deixa eu ver se entendi

é como se o objeto tomasse controle ou seja o metodo addActionListener está no Objeto JButton ??

renzonuccitelli

Funciona assim: O botão lança um objeto do tipo ActionEvent qdo pressionado. Esse objeto tem várias informações que vc pode precisar. Se fosse um MouseEvent, por exemplo, vira o x e y do mouse, qual botão etc. O que vc adiciona ao botão é o Observador (Observer). Vc inclusive pode adicionar vários observadores. Qdo vc clica no botao, ele cria o objeto ActionListener e executa o método actionPerformed(ActionEvent e) de todos os observadore que foram adicionados, passando o tal evento como parâmetro.

R
renzonuccitelli:
Funciona assim: O botão lança um objeto do tipo ActionEvent qdo pressionado. Esse objeto tem várias informações que vc pode precisar. Se fosse um MouseEvent, por exemplo, vira o x e y do mouse, qual botão etc. O que vc adiciona ao botão é o Observador (Observer). Vc inclusive pode adicionar vários observadores. Qdo vc clica no botao, ele cria o objeto ActionListener e executa o método actionPerformed(ActionEvent e) de todos os observadore que foram adicionados, passando o tal evento como parâmetro.
botao = new JButton("Botao"); // cria o objeto botao

botao.addActionListener(this); // adiciona ao objeto botao um ouvinte de açoes

é isso ?

R
Rafael Oliveira da Silva:
renzonuccitelli:
Funciona assim: O botão lança um objeto do tipo ActionEvent qdo pressionado. Esse objeto tem várias informações que vc pode precisar. Se fosse um MouseEvent, por exemplo, vira o x e y do mouse, qual botão etc. O que vc adiciona ao botão é o Observador (Observer). Vc inclusive pode adicionar vários observadores. Qdo vc clica no botao, ele cria o objeto ActionListener e executa o método actionPerformed(ActionEvent e) de todos os observadore que foram adicionados, passando o tal evento como parâmetro.
botao = new JButton("Botao"); // cria o objeto botao

botao.addActionListener(this); // adiciona ao objeto botao um ouvinte de açoes de clique de botoes

é isso ?

renzonuccitelli
Rafael Oliveira da Silva:
Rafael Oliveira da Silva:
renzonuccitelli:
Funciona assim: O botão lança um objeto do tipo ActionEvent qdo pressionado. Esse objeto tem várias informações que vc pode precisar. Se fosse um MouseEvent, por exemplo, vira o x e y do mouse, qual botão etc. O que vc adiciona ao botão é o Observador (Observer). Vc inclusive pode adicionar vários observadores. Qdo vc clica no botao, ele cria o objeto ActionListener e executa o método actionPerformed(ActionEvent e) de todos os observadore que foram adicionados, passando o tal evento como parâmetro.
botao = new JButton("Botao"); // cria o objeto botao

botao.addActionListener(this); // adiciona ao objeto botao um ouvinte de açoes de clique de botoes
é isso ?

Exatamente isso. Nesse caso ai, está sendo adicionado como ouvinte o próprio objeto referencia. Nesse caso, essa classe, ou alguma de suas "ancestrais", tem que implementar a interface ActionListener...

R

So para finalizar o metodo addActionListner() é pertencente da classe pai do JButton, e passa como parametro a classe que implementa a interface ActionListener.

mais como funciona o addActionLister() internamente ela recebe o Objeto evento e se encarrega de passar para a classe que implementa a interface ?

renzonuccitelli

Bom, apesar de não ter visto o código, eu faço uma idéia do que ocorra. O componente implementa as rotinas pra saber quando o botão foi acionado. Quando isso ocorre, ele cria um objeto da classe ActionEvent para encapsular todas as informações que vc precisa, como no exemplo do MouseEvent que eu comentei. Basicamente ele cria um modelo de eventos em alto nível pra vc pode “brincar”.

R

opaa valeu pela aula
obrigado :thumbup:

como coloco resolvido no topico ?

Criado 11 de fevereiro de 2010
Ultima resposta 12 de fev. de 2010
Respostas 11
Participantes 4