ActionListener [Problema]

Ola pessoal sou iniciante em java, e estou me deparando com um probleminha com ActionListener veja so a minha situação;
Tenho este metodo

public void actionPerformed(ActionEvent evt){
		SwingUtilities.invokeLater(new Runnable(){
			public void run(){
				Method();
			}
		});
	}

que é invocado aqui Button.addActionListener(this); mas meu problema é que quando outro Button recebe add.ActionListener(this); ele tambem execulta o metodo public void actionPerformed(ActionEvent evt), gostaria de continuar invocando meu metodo atravez de add.ActionListener( POREM AQUI COLOCAR UM PARAMETRO ) que diferencie a ação para n ter conflitos, alguem sabe o q devo fazer? Muito obrigado pela atenção!


evt.getSource();

vai lhe retornar o botão que esta invocando o evento.

eu acho melhor vc criar um ActionListener para cada botão

por exemplo

btn1.addActionListener(new ActionListener(){
//Codigo
});

btn2.addActionListener(new ActionListener(){
//Codigo
});

Quando se trata de listening, não é melhor tratar eventos em uma classe separada?

Olha eu criei esse metodo

public void adicionarOuvinte (ActionListener ouvinte)
   {
       // adicionar os ouvintes aos botões
       this.Button.addActionListener(ouvinte);
       System.out.println("Chegou aqui");
   }

porem nao consigo fazer meu botao chamar esse metodo o que devo fazer veja o codigo do meu botao

gbc.weighty = 0;
Button = new JButton("Button");
JPanel buttonPanel = new JPanel();
buttonPanel.add(Button);
add(buttonPanel,gbc,0,6,2,1);

Alguem me da uma força? e obrigado pelos posts.

Olá Pessoal tb estou tendo problema com meus actionlisteners.
eu estou fazendo o seguinte:

public class InternalFrame extends JInternalFrame implements ActionListener,
        JdbcConstants, InternalFrameListener {

    private Container painel = getContentPane();

    private JPanel jpCtr;
    public ButtonPanel Buttons;

    private String acao = "";
    private Component c;

    private GridBagConstraints gridbag;

    private JLabel label;
    private JLabel jlDtCad,  jlCod,  jlNome,  jlRg,  jlOrgExp,  jlDtExp,  jlCpf,  jlDtNasc,
            jlIdade,  jlSexo,  jlRazao,  jlNomeFant,  jlIE,  jlCnpj;
    
    private JTextField jtfCod;

    private Date data;
    private java.sql.Date sqlData;

    public void setInternalFrame(int Sizex, int Sizey, int x, int y,
            String title, boolean redimensionar, boolean fechar,
            boolean maximizar, boolean minimizar) {

        jpCtr = new JPanel(null);        

        painel.add(jpCtr, "Center");        
        
        Buttons = new ButtonPanel();
        jpCtr.add(this.Buttons);
        Buttons.setBounds(10, 10, 500, 60);

        setSize(Sizex, Sizey);
        setTitle(title);
        setResizable(redimensionar);
        setClosable(fechar);
        setMaximizable(maximizar);
        setIconifiable(minimizar);

        setVisible(false);
        setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);

    }

    public void setInternalFrame(int Sizex, int Sizey,
            String title, boolean redimensionar, boolean fechar,
            boolean maximizar, boolean minimizar) {

        jpCtr = new JPanel(null);

        painel.add(jpCtr, "Center");

        setSize(Sizex, Sizey);
        setTitle(title);
        setResizable(redimensionar);
        setClosable(fechar);
        setMaximizable(maximizar);
        setIconifiable(minimizar);

        setVisible(false);
        setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);

    }

    public void statusBotoes(boolean status1, boolean status2, boolean status3,
            boolean sair) {

        Buttons.getJInserir().setEnabled(status1);
        Buttons.getJConsultar().setEnabled(status1);
        Buttons.getJCancelar().setEnabled(status2);
        Buttons.getJSalvar().setEnabled(status2);
        Buttons.getJSair().setEnabled(status1);
        Buttons.getJAlterar().setEnabled(status3);
        Buttons.getJExcluir().setEnabled(status3);
        Buttons.getJSair().setEnabled(sair);

    }//Fim do Metodo StatusBotoes

    public void addButtonListener(ActionListener listener) {

        Buttons.getJInserir().addActionListener(listener);
        Buttons.getJAlterar().addActionListener(listener);
        Buttons.getJConsultar().addActionListener(listener);
        Buttons.getJExcluir().addActionListener(listener);
        Buttons.getJCancelar().addActionListener(listener);
        Buttons.getJSalvar().addActionListener(listener);
        Buttons.getJSair().addActionListener(listener);

    }

    public void setActionInserir(ActionEvent e){
        e.setSource(Buttons.getJInserir());
    }

    public void setActionConsultar(ActionEvent e){
        e.setSource(Buttons.getJConsultar());
    }

    public void setActionAlterar(ActionEvent e){
        e.setSource(Buttons.getJAlterar());
    }

    public void setActionExcluir(ActionEvent e){
        e.setSource(Buttons.getJExcluir());
    }

    public void setActionCancelar(ActionEvent e){
        e.setSource(Buttons.getJCancelar());
    }

    public void setActionSalvar(ActionEvent e){
        e.setSource(Buttons.getJSalvar());
    }

    public void setActionSair(ActionEvent e){
        e.setSource(Buttons.getJSair());
    }

    /*Varios metodos setter e getter*/

    public void internalFrameOpened(InternalFrameEvent e) {}

    public void internalFrameClosing(InternalFrameEvent e) {}

    public void internalFrameClosed(InternalFrameEvent e) {}

    public void internalFrameIconified(InternalFrameEvent e) {}

    public void internalFrameDeiconified(InternalFrameEvent e) {}

    public void internalFrameActivated(InternalFrameEvent e) {}

    public void internalFrameDeactivated(InternalFrameEvent e) {}

    public void actionPerformed(ActionEvent e) {}

essa é a minha superclasse para minha telas do sistema
Depois criei uma subclasse para minha tela de cidade

public class FormCidade extends InternalFrame {

    private FormConsultaPadrao Consultar = null;
    private PanelCid panelCid = null;

    public FormCidade() {

        setInternalFrame(530, 230, 500, 60, "Cadastro de Cidade",
                false, false, false, true);

        getJpCtr().add(panelCid = new PanelCid());
        panelCid.setBounds(10, 10, 500, 200);

        panelCid.setStatusField(false, false);
        statusBotoes(true, false, false, true);

          // chamando esse metodo usando this os comando funcionam normalmente
//        addButtonListener(this);
        
        //Esse metodo esta chamando a classe de eventos que criei
        addButtonListener(new EventCadCid());

        addInternalFrameListener(this);

    }

//    @Override
//    public void actionPerformed(ActionEvent e) {
//
//        if (e.getSource() == getButtons().getJInserir()) {
//            Inserir(e);
//        } else if (e.getSource() == getButtons().getJAlterar()) {
//            Alterar(e);
//        } else if (e.getSource() == getButtons().getJConsultar()) {
//            Consultar(e);
//        } else if (e.getSource() == getButtons().getJExcluir()) {
//            Excluir(e);
//        } else if (e.getSource() == getButtons().getJCancelar()) {
//            Cancelar(e);
//        } else if (e.getSource() == getButtons().getJSalvar()) {
//            Salvar(e);
//        } else if (e.getSource() == getButtons().getJSair()) {
//            Sair(e);
//        }
//    }//Fim do Metodo actionPerformed

    public void Inserir(ActionEvent evt) {
        
        JOptionPane.showMessageDialog(null, " Metodo Inserir");
        setAcao(INSERINDO);

        DaoCidade codcid = new DaoCidade();
        
        panelCid.setStatusField(false, true);
        statusBotoes(false, true, false, false);

        panelCid.getJtfCodCid().setText(codcid.setCodigo("SELECT MAX(CODCID) + 1 FROM CIDADE"));
        
    }

    public void Alterar(ActionEvent evt) {

        JOptionPane.showMessageDialog(null, " Metodo Alterar");

        panelCid.setStatusField(false, true);
        statusBotoes(false, true, false, false);

        setAcao(ALTERANDO);

    }

    public void Consultar(ActionEvent evt) {

        JOptionPane.showMessageDialog(null, " Metodo Consultar");

        panelCid.setStatusField(true, false);
        statusBotoes(true, true, true, false);

        if (Consultar == null) {
            Consultar = new FormConsultaCidade();
            FormMenu.getDesk().add(Consultar);
            Consultar.setVisible(true);
        }

        setAcao(CONSULTANDO);
    }

    public void Excluir(ActionEvent evt) {

        JOptionPane.showMessageDialog(null, " Metodo Excluir");

        panelCid.setStatusField(false, false);
        statusBotoes(true, false, false, true);

    }

    public void Cancelar(ActionEvent evt) {
        JOptionPane.showMessageDialog(null, " Metodo Cancelar");

        panelCid.setStatusField(false, false);
        statusBotoes(true, false, false, true);
    }

    public void Salvar(ActionEvent evt) {

        JOptionPane.showMessageDialog(null, " Metodo Salvar");
        panelCid.setStatusField(false, false);
        statusBotoes(true, false, false, true);

        if (getAcao().equals(INSERINDO)) {
            Cidade cidade = new Cidade();
            DaoCidade daocidade = new DaoCidade();
            cidade.setNomeCid(panelCid.getJtfNomeCid().getText());
            cidade.setUF(panelCid.getJcbUf().getValor());
            daocidade.Inserir(cidade);

        } else if (getAcao().equals(CONSULTANDO)) {
            Cidade cidade = new Cidade();
            DaoCidade daocidade = new DaoCidade();
            cidade.setCodCid(Integer.parseInt(panelCid.getJtfCodCid().getText()));
            panelCid.getJtfNomeCid().setText(cidade.getNomeCid());
            daocidade.Consultar(cidade);
        } else if (getAcao().equals(ALTERANDO)) {

            Cidade cidade = new Cidade();
            DaoCidade daocidade = new DaoCidade();
            cidade.setNomeCid(panelCid.getJtfNomeCid().getText());
            cidade.setUF(panelCid.getJcbUf().getValor());
            daocidade.Alterar(cidade);

        }
    }

    public void Sair(ActionEvent evt) {
        JOptionPane.showMessageDialog(null, " Metodo Sair");
        SystemExit.ExitInternalFrame(this);
    }

    @Override
    public void internalFrameClosing(InternalFrameEvent e) {
        SystemExit.ExitInternalFrame(new FormCidade());
    }

    public PanelCid getPanelCid() {
        return panelCid;
    }
}

Agora estava fazendo um teste com uma classe de eventos para o cadastro de cidade

public class EventCadCid implements ActionListener{

    @Override
    public void actionPerformed(ActionEvent e) {

        FormCidade tela = new FormCidade();

        if (e.getActionCommand().equals(tela.getButtons().getJInserir().getActionCommand())) {

            tela.setActionInserir(e);
            if (e.getSource() == tela.getButtons().getJInserir()) {
                JOptionPane.showMessageDialog(null, "Inserir");
                tela.Inserir(e);
            }

        } else if (e.getActionCommand().equals(tela.getButtons().getJConsultar().getActionCommand())) {

            tela.setActionConsultar(e);
            if (e.getSource() == tela.getButtons().getJConsultar()) {
                JOptionPane.showMessageDialog(null, "Consultar");
                tela.Consultar(e);
            }

        } else if (e.getActionCommand().equals(tela.getButtons().getJAlterar().getActionCommand())) {

            tela.setActionAlterar(e);
            if (e.getSource() == tela.getButtons().getJAlterar()) {
                JOptionPane.showMessageDialog(null, "Alterar");
                tela.Alterar(e);
            }

        } else if (e.getActionCommand().equals(tela.getButtons().getJExcluir().getActionCommand())) {

            tela.setActionExcluir(e);
            if (e.getSource() == tela.getButtons().getJExcluir()) {
                JOptionPane.showMessageDialog(null, "Excluir");
                tela.Excluir(e);
            }

        } else if (e.getActionCommand().equals(tela.getButtons().getJCancelar().getActionCommand())) {

            tela.setActionCancelar(e);
            if (e.getSource() == tela.getButtons().getJCancelar()) {
                JOptionPane.showMessageDialog(null, "Cancelar");
                tela.Cancelar(e);
            }

        } else if (e.getActionCommand().equals(tela.getButtons().getJSalvar().getActionCommand())) {

            tela.setActionSalvar(e);
            if (e.getSource() == tela.getButtons().getJSalvar()) {
                JOptionPane.showMessageDialog(null, "Salvar");
                tela.Salvar(e);
            }

        } else {

            tela.setActionSair(e);
            if (e.getSource() == tela.getButtons().getJSair()) {
                JOptionPane.showMessageDialog(null, "Sair");
                SystemExit.ExitInternalFrame(tela);
            }

        }

    }
}

Bem pessoa se vcs olharem bem para os meus codigos, coloque uns joptionpane para mostrar na tela se tudo esta funcionando.
para a minha surpresa todos os meus joptionpane sao chamados, mostrando que ele a classe de evento usando o addButtonListener esta funcionando.
o problema e[ que ele entra nos metodos inserir, consultar, alterar, excluir, cancelar, salvar e sair, mas nao executa as funções

diferentemente se eu usar o this no metodo addButtonsListener. ele executa normalmente tudo o que esta dentro dos metodos.
Bem na verdade não sei o que esta acontencendo, nem sei o porque de um jeito executa e de outro.

bem é isso desde já agradeço a atenção de todos e aguardo resposta.

obrigado