Tentando implementar um ouvinte?

Salve galera…Eu preciso implementar um ouvinte ou uma lista de ouvintes que recebam o que foi alterado de uma consulta…Por exemplo, eu tenho um cadastro de empresa que abre a consulta de cidades para pegar o codigo da cidade, quero q quando eu pegar esse codigo da cidade um listener passe para a empresa o codigo da cidade q escolhi na consulta.

to tentando assim.

public class ConsultaCidades extends JFrame{
     public JTextField codCidade;
     public JButton btnClick;
    
     public ConsultaCidades(){
           codCidade = new JTextField(10);
           btnClick = new JButton("btnClick");
     }

     //retorna o codigo da cidade
    public interface ConsultaCidadeEvent{
        public Integer getCodigoCidade();        
    }

    //pega o codigo da cidade selecionada
    private interface ConsultaCidadeListener {
       public void cidadeSelecionada(ConsultaCidadeEvent evt);  
    }

    //lista de ouvintes
    private ArrayList<ConsultaCidadeListener> listeners = new ArrayList<ConsultaCidadeListener>();

    //adiciona ouvintes
    public void addListener(ConsultaCidadeListener listener){
        if(!listeners.contains(listener)){
            listeners.add(listener);
        }
    }
    
     //avisa aos notificadores da mudanca
    private void notifyListeners(final Integer codigoCidade) {   
       ConsultaCidadeEvent evt = new ConsultaCidadeEvent() {
           public Integer getCodigoCidade() {
               return Integer.parseInt(codCidade.getText());
           }
       };       
    }
     
}


//aqui eh onde tento adicionar um ouvinte e pegar o codigo da cidade 
public class CadastroEmpresa implements ConsultaCidadeListener {

        public void consultarCidade() {
           ConsultaCidade consulta = new ConsultaCidade();
           consulta.addListener(this);
           consulta.setVisible(true);
        }
              
        public void cidadeSelecionada(ConsultaCidadeEvent evt) {
           // Este metodo sera invocado quando uma cidade for selecionada.
           txtNomeCidade.setText("Cidade escolhida: " + evt.getCodigoCidade());
        } 
}

Como eu consigo fazer isso ??? Estou na pesquisa mas ainda naum encontrei uma maneira de fazer…

obrigado

bem galera…como ninguem respondeu, eu pesquisei muiiito e encontrei uma solução…um amigo meu Peste_Bubonica canal irc #java-br no freenode.net me ajudou a chegar a um resultado 100% funcional.

fica aqui como fazer.

//classe de consulta Cidades
public class ConsultaCidades extends JFrame{    
    private JTextField cidade;
    private JTextField codigo;
    private JButton btnClick;
    private JPanel panel1;
    
    public ConsultaCidades(){        
        this.setDefaultCloseOperation(EXIT_ON_CLOSE);        
        panel1 = new JPanel();        
        codigo = new JTextField(20);
        codigo.setName("codigoCidade");
        cidade = new JTextField(20);
        btnClick = new JButton("Click");        
        btnClick.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                  Integer codigoCidsade = Integer.parseInt(codigo.getText());
                  notifyListeners(codigoCidsade); //aqui eu uso a notificacao para os ouvintes
            }
        });        
        panel1.add(codigo);        
        panel1.add(cidade);        
        panel1.add(btnClick);
        this.add(panel1);
    }
    
/**
*Aqui começa a implementar os listeners
*/
    //retorna o codigo da cidade
    public interface ConsultaCidadeEvent{
        public Integer getCodigoCidade();        
    }
    
    //pega o codigo da cidade selecionada
    public interface ConsultaCidadeListener {
       public void cidadeSelecionada(ConsultaCidadeEvent evt);  
    }//
    
    //lista de ouvintes
    private ArrayList<ConsultaCidadeListener> listeners = new ArrayList<ConsultaCidadeListener>();
    
    //adiciona ouvintes
    public void addListener(ConsultaCidadeListener listener) {
        if(!listeners.contains(listener)){
            listeners.add(listener);
        }
    }
    
    //remove listener
    public void removeListener(ConsultaCidadeListener l) {
        listeners.remove(l);
    }
    
    //avisa aos notificadores da mudanca
    private void notifyListeners(final Integer codigoCidade) {   
       ConsultaCidadeEvent evt = new ConsultaCidadeEvent() {
            @Override
           public Integer getCodigoCidade() {
               return codigoCidade;
           }
       };
       for(ConsultaCidadeListener l : listeners) {
           l.cidadeSelecionada(evt);
       }
    }
    /**
    * Pronto, aqui termina implementar os listeners
    */
}




//aqui a classe empresa
public class Empresa extends javax.swing.JFrame implements ConsultaCidadeListener {
    /** Creates new form Empresa */
    public Empresa() {
        initComponents();
    }

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        ConsultaCidades c = new ConsultaCidades();
        c.setSize(new Dimension(640,480)); 
        c.addListener(this); //adiciono o ouvinte              
        c.setVisible(true);
    }                   

     public void cidadeSelecionada(ConsultaCidadeEvent evt) {
        System.out.println(evt.getCodigoCidade()); //aqui exibo o retorno do listener
    }

Fazendo dessa maneira não é necessário acoplar classes, que é a maneira como eu trabalhava…Mas o Peste me abriu os olhos…kkkkk !!! Agora consigo trabalhar com .jar diferentes apenas criando esses ouvintes.

P.S: Vlw ae Peste, tu é fera muleke. É nóis q tá. kkk !!!

t+ e obrigado