Descobrir quem clicou (referência compartilhada)

Bom dia … estou com um problemão aqui, se alguém puder me ajudar …
Vamos por partes:
Eu criei um JPanel que vai servir como o meu MDI(eu ia criar um JDesktopPane, mas eu queria setar Layout dentro dele e só o JPanel aceitou rs), dentro dele eu abro uma classe de Modelo que extende JInternalFrame.

Essa classe Modelo serve para todos os meus formulários que eu for criar, tipo, ele já vem com uma barra de ferramentas com os botoes.

A classe que gera a caixa de ferramentas é a seguinte:

package model;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JToolBar;

public class Ferramentas {
	// barra de botões do menu
	public JToolBar barraBotoes;
	public JButton barraNovo;
	public JButton barraSalvar;
	public JButton barraEditar;
	public JButton barraCancelar;
	public JButton barraPesquisar;
	public JButton barraExcluir;
	public JButton barraPrimeiro;
	public JButton barraAnterior;
	public JButton barraProximo;
	public JButton barraUltimo;
	public JButton barraHistorico;
	public JButton barraSair;
	public JPanel painelPrincipalTool;
	
	private Cliques clique;
	
	// construtor da classe
	public void criarBarraFerramentas(){
		// Botões do menu
		barraBotoes = new JToolBar();
		
		painelPrincipalTool = new JPanel();
		
		Icon icoNovo = new ImageIcon("imagens/Novo.png");
		barraNovo = new JButton(icoNovo);
		barraNovo.setToolTipText("Prepara o formulário para receber novos cadastros");
		
		Icon icoSalvar = new ImageIcon("imagens/Salvar.png");
		barraSalvar = new JButton(icoSalvar);
		barraSalvar.setToolTipText("Grava os dados cadastrados");
		
		Icon icoEditar = new ImageIcon("imagens/Editar.png");
		barraEditar = new JButton(icoEditar);
		barraEditar.setToolTipText("Atualiza os dados cadastrados");
		
		Icon icoCancelar = new ImageIcon("imagens/Cancelar.png");
		barraCancelar = new JButton(icoCancelar);
		barraCancelar.setToolTipText("Cancela as últimas alterações feitas na tela");
		
		Icon icoPesquisar = new ImageIcon("imagens/Procurar.png");
		barraPesquisar = new JButton(icoPesquisar);
		barraPesquisar.setToolTipText("Busca um cadastro no banco de dados");
		
		Icon icoExcluir = new ImageIcon("imagens/Excluir.png");
		barraExcluir = new JButton(icoExcluir);
		barraExcluir.setToolTipText("Exclui um cadastro no banco de dados");
		
		Icon icoPrimeiro = new ImageIcon("imagens/data_Primeiro.png");
		barraPrimeiro = new JButton(icoPrimeiro);
		barraPrimeiro.setToolTipText("Primeiro");
		
		Icon icoAnterior = new ImageIcon("imagens/data_Anterior.png");
		barraAnterior = new JButton(icoAnterior);
		barraAnterior.setToolTipText("Anterior");
		
		Icon icoProximo = new ImageIcon("imagens/data_Proximo.png");
		barraProximo = new JButton(icoProximo);
		barraProximo.setToolTipText("Próximo");
		
		Icon icoUltimo = new ImageIcon("imagens/data_Ultimo.png");
		barraUltimo = new JButton(icoUltimo);
		barraUltimo.setToolTipText("Último");
		
		Icon icoHistorico = new ImageIcon("imagens/Historico.png");
		barraHistorico = new JButton(icoHistorico);
		barraHistorico.setToolTipText("Mostra o usuário que cadastrou e o último usuário que atualizou o cadastro");
		
		Icon icoSair = new ImageIcon("imagens/Sair.png");
		barraSair = new JButton(icoSair);
		barraSair.setToolTipText("Fecha este formulário");

		barraBotoes.add(barraNovo);
		barraBotoes.add(barraSalvar);
		barraBotoes.add(barraEditar);
		barraBotoes.add(barraCancelar);
		barraBotoes.add(barraPesquisar);
		barraBotoes.add(barraExcluir);
		barraBotoes.addSeparator();
		barraBotoes.add(barraPrimeiro);
		barraBotoes.add(barraAnterior);
		barraBotoes.add(barraProximo);
		barraBotoes.add(barraUltimo);
		barraBotoes.addSeparator();
		barraBotoes.add(barraHistorico);
		barraBotoes.addSeparator();
		barraBotoes.add(barraSair);
		
		painelPrincipalTool.add(barraBotoes);
		
		if (clique == null){
			clique = new Cliques();
		}
		barraNovo.addActionListener(clique);
		barraSalvar.addActionListener(clique);
		barraEditar.addActionListener(clique);
		barraCancelar.addActionListener(clique);
		barraPesquisar.addActionListener(clique);
		barraExcluir.addActionListener(clique);
		barraPrimeiro.addActionListener(clique);
		barraAnterior.addActionListener(clique);
		barraProximo.addActionListener(clique);
		barraUltimo.addActionListener(clique);
		barraHistorico.addActionListener(clique);
		barraSair.addActionListener(clique);
		
	} // fim do construtor da classe
	
	public static void sair(){
		System.exit(1);
	}
    
	// trata os eventos
    public class Cliques implements ActionListener{

		public void actionPerformed(ActionEvent src) {
			
			
			
			
		}
    	
    }
    
}

E a classe modelo é essa:

package model;

import java.awt.BorderLayout;

import javax.swing.JInternalFrame;
import javax.swing.JPanel;

public class FrmModelo extends JInternalFrame {
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	public JPanel pnlFundo;
	public Ferramentas ferramentas;
	
	public FrmModelo(){
		// cria a tela
		getTela();
		
		// joga o ContentPane no painel de fundo 
		pnlFundo = (JPanel)getContentPane();
		
		// seta o default para o botão sair(x)
		this.setDefaultCloseOperation(JInternalFrame.DISPOSE_ON_CLOSE);
		
		// carrega a barra de ferramentas padrão
		getFerramentas();
		ferramentas.criarBarraFerramentas();
		pnlFundo.add(ferramentas.painelPrincipalTool, "North");
		
		// mostra o formulário
		setVisible(true);
	}
	
	//cria o MDI
	public JPanel getTela(){
		if (pnlFundo == null){
			pnlFundo = new JPanel(new BorderLayout());
		}	
		return pnlFundo;
	}
	
	// pega a barra de ferramentas
	public Object getFerramentas(){
		if (ferramentas == null){
			ferramentas = new Ferramentas();
		}
		return ferramentas;
	}
	
}

Bom, depois disso feito, eu crio as telas FrmQualquerCoisa que vai herdar a classe FrmModelo e eu jogo a instância da classe filha no Center do pnlFundo. Só para inserir os campos que eu quero, como no exemplo bem básico a seguir:

package view;

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.GridLayout;

import javax.swing.BorderFactory;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;

import model.FrmModelo;

public class FrmEspecies extends FrmModelo {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	
	private JPanel pnlCampos = new JPanel(new FlowLayout());
	private JPanel pnlComponentes = new JPanel(new BorderLayout());
		private JPanel pnlDados = new JPanel(new GridLayout(2,2));
			private JLabel lblEspecie = new JLabel(" Espécie >>");
			private JLabel lblComp = new JLabel(" ");
			private JTextField txtEspecie = new JTextField(20);
			private JLabel lblComp2 = new JLabel(" ");
			
		private JPanel pnlDescricaoAux = new JPanel(new FlowLayout());
		private JPanel pnlDescricao = new JPanel(new BorderLayout()); 
			private JLabel lblDescricao = new JLabel(" Descrição >>");
			private JTextArea txtDescricao = new JTextArea(10,10);
	
			
	// método construtor
	public FrmEspecies(String sTitulo){
// --------------- Inicio Padrões da tela ----------------
		// seta o título
		setTitle(sTitulo);
		
		// coloca borda no painel
		pnlComponentes.setBorder(BorderFactory.createTitledBorder("  Dados"));
// --------------- Final Padrões da tela ----------------

// ----------- Inicio adicionando campos ---------------
		pnlDados.add(lblEspecie);
		pnlDados.add(lblComp);
		pnlDados.add(txtEspecie);
		pnlDados.add(lblComp2);
		
		JScrollPane sp = new JScrollPane(txtDescricao);
		pnlDescricaoAux.add(sp);
		pnlDescricao.add(lblDescricao, "North");
		pnlDescricao.add(sp, "Center");
		
		pnlComponentes.add(pnlDados, "North");
		pnlComponentes.add(pnlDescricao, "Center");
		
		pnlCampos.add(pnlComponentes);
// ------------ Final adicionando campos ---------------
				
		// joga os dados
		pnlFundo.add(pnlCampos,"Center");	
	}

}

Agora, o mais importante, não estou conseguindo tratar os eventos, não consigo imaginar onde e como eu pego o evento do clique no botão barraSair, por exemplo !!! … Se 3 classes estiverem instanciadas ao mesmo tempo, em qual classe eu devo fazer esse tratamento, na Ferramentas ??? Se for, como eu faço pra saber de qual classe é a instância ??? …
Tentei fazer algo assim dentro da classe Ferramentas

um if (src instanceOf FrmEspecie){
     
}

Mas, não dá certo e ainda assim, eu não saberia como matar a instância da FrmEspecie, nesse caso …

Alguém poderia me ajudar, antes de postar eu pesquisei um monte de coisas aqui, estou com o livro aberto e não acho uma forma de fazer !!! …

Obrigado a todos e me desculpe pelo tamanho do “TESTAMENTO” que eu postei.