Eventos

6 respostas
tiominga

Oi, seguinte, programo em Delphi faz bastante tempo,e estou estudando java agora. Talvez por trabalhar com Delphi surgiram algumas dúvidas na parte de eventos.

Criei este pequeno formulário, porém gostaria de saber:

1-Como faço para o botao1 mostrar esta mensagem e o botao2 mostrar “sou o 2” por exemplo (no caso os 2 estão fazendo a mesma coisa pois nao entendo como referenciar o 1 e o 2 no actionPerformed)

2-Como faço para usar outro evento que não o onclick (por exemplo, quero que ao passar o mouse por cima do botão1 apareça “mouse encima”)

Muito obrigado.

Segue abaixo o código:

import javax.swing.*;                                     //as 3 linhas à esquerda são bibliotecas chamadas pelo java
import java.awt.*;
import java.awt.event.*;


 
 //aqui inicia a classe
public class Janela extends JFrame implements ActionListener     
{

     JButton botao1=new JButton("Adicionar");             //cria 2 variaveis botão e uma variavel panel
      JButton botao2=new JButton("Adicionar2");
     JPanel  panel = new JPanel();

    public Janela()                   //cria a janela
    {
       
        setTitle("Exemplo de janela Java");               //caption da janela
        setSize(300,200);                                 //tamanho da janela
        setDefaultCloseOperation(EXIT_ON_CLOSE);          //quando fechada tem que terminar o processo
        
       
        getContentPane().add(botao1, BorderLayout.EAST);  //agora define o local do botão  
        getContentPane().add(botao2, BorderLayout.CENTER);//agora define o local do botão2 
        
        
           
        botao1.addActionListener(this);                   //Acrescenta os botões ao actiolister pois executarão eventos
        botao2.addActionListener(this);
       
        
    }
          
     public void actionPerformed(ActionEvent event)       //parte de eventos (obrigatória ao implementar ActionListener )
     {
      JOptionPane.showMessageDialog(null,"teste");      
     }     
    
    
    public static void main (String args[]) {
        new Janela().show();
    }
}

6 Respostas

douglas_vidotto

fala tiominga, blz?? Para conseguir disparar os eventos você pode fazer de duas formas: Utilizar somente uma clase (que foi mais ou menos como você fez) e no método actionPerformed você terá que usar o seu objeto ActionEvent para saber qual botão foi clicado utilizando uma comparação dessa forma:

if(event.getSource == botao1)
     JOptionPane.showMessageDialog(null,"Botao 1 pressionado");
  else
      JOptionPane.showMessageDialog(null,"Botao 2 pressionado");

Você pode também utilizar classes internas. Uma classe interna é uma classe como outra qualquer, porém ela é implementada dentro de uma outra classe. Essa classe interna tem acesso a todos os dados da classe externa. Essa classe interna implementará o ActionListener e consequentemente o método actionPerformed. No método addActionListener você passa um novo objeto dessa classe interna, ao invés de this.

Exemplo de uma classe interna:

public class Externa{
 
             private JButton botao;

             public Externa(){

                  botao = new JButton("Clique em mim");
                  botao.addActionListener(new Interna());
             }

             private class Interna implements ActionListener{

                  public void actionPerformed(ActionEvent event){

                       JOptionPane.showMessageDialog(null,"Botao pressionado");

                  }


             }//fim da classe Interna 

}//fim da classe Externa

Você pode implementar quantas classes internas quiser. Se quiser pode também implementar uma classe interna para cada botão.

Abraços!!

lina

Oi,

você também pode definir ações individuais para seus botões. Fazendo:

Action
io_ie_botao1	=	new	AbstractAction()
{
	public void actionPerformed(ActionEvent e)
	{
		sysout("Botão 1");
	}
}

Action
io_ie_botao2	=	new	AbstractAction()
{
	public void actionPerformed(ActionEvent e)
	{
		sysout("Botão 2");
	}
}

Depois você chama assim: botao1.setAction(io_ie_botao1); e botao2.setAction(io_ie_botao2);

Tchauzin!

tiominga

Seguinte:

O código agora ficou assim



public void actionPerformed(ActionEvent event)       //parte de eventos (obrigatória ao implementar ActionListener )

{
if (event.getSource == botao1) JOptionPane.showMessageDialog(null,"Botao 1 pressionado");
   if (event.getSource == botao2) JOptionPane.showMessageDialog(null,"Botao 2 pressionado");
   
          
 }

Só que ta dando erro :frowning:

http://72.29.72.39/~tiominga/downloads/erro.jpg

Se puder dizer pq, prometo que vou estudar poo em java antes de voltar a azucrinar vocês.

Muito obrigado

M

O ‘event’ deve ser substituido pelo nome do seu objeto ActionEvent. Por exemplo:

public void actionPerformed(ActionEvent e) {
// nesse caso devo usar 'e' no lugar de 'event'
}

Observação: o método show() de JFrame está deprecated (não é aconselhável usar). No lugar use o método setVisible(true).

douglas_vidotto

Voce esqueceu de colocar os parenteses no método getSource()

fica assim:

event.getSource() == botao1

Hehe, nada cara… quando tem dúvida tem que perguntar mesmo, não importa se é pequena ou grande. Mas é uma boa ir lendo, pesquisando e no que você não tiver conseguindo, vai mandando as dúvidas aqui… Eu também to aprendendo. Sou iniciante em java também.

Abraços e boa sorte

tiominga

Consegui, o código completo fica assim: (muito obrigado a todos)

import javax.swing.<em>;                                     //as 3 linhas à esquerda são bibliotecas chamadas pelo java

import java.awt.</em>;

import java.awt.event.*;
//aqui inicia a classe
public class Janela extends JFrame implements ActionListener     
{

   JButton botao1=new JButton("Adicionar");             //cria 2 variaveis botão e uma variavel panel
    JButton botao2=new JButton("Adicionar2");
   JPanel  panel = new JPanel();

  public Janela()                   //cria a janela
  {
     
       setTitle("Exemplo de janela Java");               //caption da janela
       setSize(300,200);                                 //tamanho da janela
       setDefaultCloseOperation(EXIT_ON_CLOSE);          //quando fechada tem que terminar o processo
       
      
       getContentPane().add(botao1, BorderLayout.EAST);  //agora define o local do botão  
     getContentPane().add(botao2, BorderLayout.CENTER);//agora define o local do botão2 
       
       
         
       botao1.addActionListener(this);                   //Acrescenta os botões ao actiolister pois executarão eventos
       botao2.addActionListener(this);
      
      
   }
         
 public void actionPerformed(ActionEvent e) //parte de eventos (obrigatória ao implementar ActionListener)
 {

 if (e.getSource() == botao1) JOptionPane.showMessageDialog(null,"Botao 1 pressionado");
 if (e.getSource() == botao2) JOptionPane.showMessageDialog(null,"Botao 2 pressionado");


 }
  
  public static void main (String args[]) {
      new Janela().show();
  }

}

Criado 11 de fevereiro de 2009
Ultima resposta 11 de fev. de 2009
Respostas 6
Participantes 4