Duvida com evento, me corrijam por favor caso estive errado ! [Resolvido]
11 respostas
R
Rafael_Oliveira_da_S
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 ?
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:
importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjavax.swing.JButton;importjavax.swing.JFrame;importjavax.swing.JOptionPane;importjavax.swing.JPanel;importjavax.swing.SwingUtilities;/** * * @author Nathan */publicclassTesteextendsJFrame{privateJPanelp;privateJButtonb;publicTeste(){super("Teste com eventos");this.init();}privatevoidinit(){p=newJPanel();b=newJButton("Teste");b.addActionListener(newButtonEventListener());p.add(b);this.getContentPane().add(p);this.setSize(600,400);this.setVisible(true);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}privateclassButtonEventListenerimplementsActionListener{publicvoidactionPerformed(ActionEvente){JOptionPane.showMessageDialog(null,"botao clicado");}}publicstaticvoidmain(String[]args){SwingUtilities.invokeLater(newRunnable(){publicvoidrun(){newTeste();}});}}
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
Rafael_Oliveira_da_S
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
Rafael_Oliveira_da_S
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_S
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
Rafael_Oliveira_da_S
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”.