Ploblemas na hora de criar um evento no botão [Resolvido]

Olá senhores, estou com uma dúvida na hora de implementar um evento no botão botaoSalvar. Quando do um [color=green]botaoSalvar.addActionListener(this);[/color] ele dá erro, por q?

Oia:

import java.awt.event.ActionListener;
import java.util.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;

public class Tela extends JFrame implements ActionListener {
    public static void main(String[] args){
        Tela janela = new Tela();// Criação do obejto Tela
        janela.setSize(290,200); //setando o tamanho da janela
        janela.setTitle("Cadastro"); //setando o titulo
        Container c = janela.getContentPane(); //criando um objeto para trabalhar apenas com o container
        c.setBackground(new Color(130,40,100));
        c.setLayout(null); //Definindo o container sem layout

        //Definindo os rótulos dos campos
        JLabel txtNome = new JLabel("Nome");
        JLabel txtEnd = new JLabel("Endereço");
        JLabel txtNumero = new JLabel("Número");
        JLabel txtBairro = new JLabel("Bairro");
        
        //Definindo os campos do container
        JTextField campoNome = new JTextField();
        JTextField campoEnd = new JTextField();
        JTextField campoNumero = new JTextField();
        JTextField campoBairro = new JTextField();
        
        //Definindo os botões
        JButton botaoSalvar = new JButton("Salvar");
        JButton botaoCancelar = new JButton("Cancelar");
        
        //Definindo o tamanho e a disposição dos componentes
        txtNome.setBounds(10, 20, 70, 20);
        txtEnd.setBounds(10, 60, 70, 20);
        txtNumero.setBounds(10, 100, 70, 20);
        txtBairro.setBounds(150, 100, 70, 20);

        campoNome.setBounds(70, 20, 90, 20);
        campoEnd.setBounds(70, 60, 90, 20);
        campoNumero.setBounds(70, 100, 60, 20);
        campoBairro.setBounds(200, 100, 60, 20);

        botaoSalvar.setBounds(70, 130, 70, 20);
        botaoCancelar.setBounds(160, 130, 90, 20);

        //Adicionando os componentes no container
        c.add(txtNome);
        c.add(txtEnd);
        c.add(txtNumero);
        c.add(txtBairro);

        c.add(campoNome);
        c.add(campoEnd);
        c.add(campoNumero);
        c.add(campoBairro);

        c.add(botaoSalvar);
        c.add(botaoCancelar);


        //Criando eventos
        botaoSalvar.addActionListener(this); //Dá erro aki +++++++++++++

        //Configuraçõs da janela
        janela.setResizable(false);
        janela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        janela.setVisible(true);
    }

    public void actionPerformed(ActionEvent e){

    }
}

Desde já agradeço! :wink:

você tem que implementar o interface do actionListener… like this

[code]menuAbrir.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent e)
{
try{
JFileChooser fc = new JFileChooser();
fc.setDialogTitle(“Escolha o arquivo para fazer o carregamento das imagens”);
fc.setFileFilter(new FileNameExtensionFilter(“TXT”, “txt”));
fc.setAcceptAllFileFilterUsed(false);
fc.showDialog(f, “Ok”);
loader = new Loader();
LoadArquivo(fc.getSelectedFile().toString(), loader) ;
arvore = loader.getArvore();
imagemAtual = arvore.getRoot();

                carregaImagem(imagemAtual.getNomeImagem());
                InsereMouseListener(iv);
                InsereMouseMoveListener(iv);
        	}catch (Exception e11) {
				return;
			}
        }
            					}
    						);[/code]

[quote=Cornelius]Olá senhores, estou com uma dúvida na hora de implementar um evento no botão botaoSalvar. Quando do um [color=green]botaoSalvar.addActionListener(this);[/color] ele dá erro, por q?

Oia:

import java.awt.event.ActionListener;
import java.util.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;

public class Tela extends JFrame implements ActionListener {
    public static void main(String[] args){
        Tela janela = new Tela();// Criação do obejto Tela
        janela.setSize(290,200); //setando o tamanho da janela
        janela.setTitle("Cadastro"); //setando o titulo
        Container c = janela.getContentPane(); //criando um objeto para trabalhar apenas com o container
        c.setBackground(new Color(130,40,100));
        c.setLayout(null); //Definindo o container sem layout

        //Definindo os rótulos dos campos
        JLabel txtNome = new JLabel("Nome");
        JLabel txtEnd = new JLabel("Endereço");
        JLabel txtNumero = new JLabel("Número");
        JLabel txtBairro = new JLabel("Bairro");
        
        //Definindo os campos do container
        JTextField campoNome = new JTextField();
        JTextField campoEnd = new JTextField();
        JTextField campoNumero = new JTextField();
        JTextField campoBairro = new JTextField();
        
        //Definindo os botões
        JButton botaoSalvar = new JButton("Salvar");
        JButton botaoCancelar = new JButton("Cancelar");
        
        //Definindo o tamanho e a disposição dos componentes
        txtNome.setBounds(10, 20, 70, 20);
        txtEnd.setBounds(10, 60, 70, 20);
        txtNumero.setBounds(10, 100, 70, 20);
        txtBairro.setBounds(150, 100, 70, 20);

        campoNome.setBounds(70, 20, 90, 20);
        campoEnd.setBounds(70, 60, 90, 20);
        campoNumero.setBounds(70, 100, 60, 20);
        campoBairro.setBounds(200, 100, 60, 20);

        botaoSalvar.setBounds(70, 130, 70, 20);
        botaoCancelar.setBounds(160, 130, 90, 20);

        //Adicionando os componentes no container
        c.add(txtNome);
        c.add(txtEnd);
        c.add(txtNumero);
        c.add(txtBairro);

        c.add(campoNome);
        c.add(campoEnd);
        c.add(campoNumero);
        c.add(campoBairro);

        c.add(botaoSalvar);
        c.add(botaoCancelar);


        //Criando eventos
        botaoSalvar.addActionListener(this); //Dá erro aki +++++++++++++

        //Configuraçõs da janela
        janela.setResizable(false);
        janela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        janela.setVisible(true);
    }

    public void actionPerformed(ActionEvent e){

    }
}

Desde já agradeço! :wink: [/quote]

Cara faz o seguinte:
no metodo PUBLIC VOID ACTIONPERFORMED(ACTIONEVENT E) que vc tem ai
faz isso:

    public void actionPerformed(ActionEvent e){
        if(e.getActionCommand.equals("Salvar"){
             //aki vc coloca o q vc quer salvar no banco de dados ou em outro lugar!!!
        }
    }

falow??
T++

Senhores,

Consegui rodar o código segundo a dica do amigo wilds87, segue:

botaoSalvar.addActionListener(
		new ActionListener(){
			    public void actionPerformed(ActionEvent e){   
				JOptionPane.showMessageDialog(null,"Consegui!"); 
    		            }   
		}
	);

Porém, gostei da solução do amigo Andr?Heidi Moriya , só que não consegui usar :cry:. Minha duvida é:

Coloco isso no método principal:

Depois crio um método na mesma classe, assim:

public void actionPerformed(ActionEvent e){ 
	if(e.getActionCommand.equals("Salvar")){       
		JOptionPane.showMessageDialog(null,"Consegui!");
	}
}

Aquela primeira linha chamaria o método, certo? Só que dá erro. Segue:
[color=darkblue]non-static variable this cannot be referenced from a static contex
t
botaoSalvar.addActionListener(this);
^
Tela.java:63: addActionListener(java.awt.event.ActionListener) in javax.swing.Ab
stractButton cannot be applied to (Tela)
botaoSalvar.addActionListener(this);
^
Tela.java:79: cannot find symbol
symbol : variable getActionCommand
location: class java.awt.event.ActionEvent
if(e.getActionCommand.equals(“Salvar”)){
^
3 errors
[/color]

Cara! para adicionar um actionListener você tem que ter um actionListener! no teu caso o this não é um actionListener!
no meu exemplo eu implementei o actionListener internamente mesmo, mas você declarar ele externamente.

Um exemplo tente interpreta-lo

ActionListener al_botao = new ActionListener() { public void actionPerformed(ActionEvent ev) { // o botao foi clicado! System.out.println("pqp isso funcionou!"); } };
Criamos o ActionListener… agora…

adicionamos ele ao seu botao…

Copiei esse exemplo desse tópico, mas ele vai te ajudar certamente!
http://www.guj.com.br/posts/list/16047.java

Se isso te ajudou, coloque [RESOLVIDO] no topico.

Atenciosamente.
William Gubiani da Silva

Olá Cornelius,

Percebi o seguinte: vc esta criando a sua tela dentro do metodo “public static void main(String[] args)”.

Tente fazer o seguinte:

import java.awt.event.ActionListener;   
import java.util.*;   
import javax.swing.*;   
import java.awt.*;   
import java.awt.event.ActionEvent;   
  
public class Tela extends JFrame implements ActionListener {   

   public Tela(){
      initComponents();
   }

   public void initComponents(){
        setSize(290,200); //setando o tamanho da janela   
        setTitle("Cadastro"); //setando o titulo   
        Container c = janela.getContentPane(); //criando um objeto para trabalhar apenas com o container   
        c.setBackground(new Color(130,40,100));   
        c.setLayout(null); //Definindo o container sem layout   
  
        //Definindo os rótulos dos campos   
        JLabel txtNome = new JLabel("Nome");   
        JLabel txtEnd = new JLabel("Endereço");   
        JLabel txtNumero = new JLabel("Número");   
        JLabel txtBairro = new JLabel("Bairro");   
           
        //Definindo os campos do container   
        JTextField campoNome = new JTextField();   
        JTextField campoEnd = new JTextField();   
        JTextField campoNumero = new JTextField();   
        JTextField campoBairro = new JTextField();   
           
        //Definindo os botões   
        JButton botaoSalvar = new JButton("Salvar");   
        JButton botaoCancelar = new JButton("Cancelar");   
           
        //Definindo o tamanho e a disposição dos componentes   
        txtNome.setBounds(10, 20, 70, 20);   
        txtEnd.setBounds(10, 60, 70, 20);   
        txtNumero.setBounds(10, 100, 70, 20);   
        txtBairro.setBounds(150, 100, 70, 20);   
  
        campoNome.setBounds(70, 20, 90, 20);   
        campoEnd.setBounds(70, 60, 90, 20);   
        campoNumero.setBounds(70, 100, 60, 20);   
        campoBairro.setBounds(200, 100, 60, 20);   
  
        botaoSalvar.setBounds(70, 130, 70, 20);   
        botaoCancelar.setBounds(160, 130, 90, 20);   
  
        //Adicionando os componentes no container   
        c.add(txtNome);   
        c.add(txtEnd);   
        c.add(txtNumero);   
        c.add(txtBairro);   
  
        c.add(campoNome);   
        c.add(campoEnd);   
        c.add(campoNumero);   
        c.add(campoBairro);   
  
        c.add(botaoSalvar);   
        c.add(botaoCancelar);   
  
  
        //Criando eventos   
        botaoSalvar.addActionListener(this); //Dá erro aki +++++++++++++   
  
        //Configuraçõs da janela   
        setResizable(false);   
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);   
        setVisible(true);   
   }           
  
    public void actionPerformed(ActionEvent e){   
         [b]if(e.getActionCommand().equals("Salvar"){
                  javax.swing.JOptionPane.showMessageDialog(null,"Salvar");
             }[/b]
    }   


    public static void main(String[] args){
       Tela janela = new Tela();       
    }
}   

Talves dessa forma possa funcionar o que vc ta querendo fazer.
caso nao apareça nada coloque o setVisible como false.
dai no metodo main, vc coloca “janela.setVisible(true)”

falow?
qualquer coisa estamos ai

É Andr?Heidi Moriya fiz esse exemplo de acordo com o que o professor fez… criando a interface pelo método construtor fica bem melhor!
Também consegui implementar o ActionListener wilds87 externamente usando this, mas entendi o que disse, o método precisa reber o objeto pra funfar…

    public void actionPerformed(ActionEvent e){ 
	if(e.getSource() == botaoSalvar){       
		JOptionPane.showMessageDialog(null,"Consegui!");
	}
    }

Muito obrigado senhores, boiei bastante aprendendo interface gráfica, mas agora to entendendo melhor. Resolvido! :wink: