Como disparar um evento via código?

3 respostas
reolca

Pessoal,

Tenho um JFrame e nele um JPanel. Nesse JPanel existe um JLabel e um método privado à classe JPanel (feito no Netbeans e não tem como deixar público) que é o código executado quando o usuário clica nesse JLabel.

Aí está o método privado:

private void anterior(java.awt.event.MouseEvent evt) {                          

        try {
            
            Citacao citacao = CitacaoDAO.recuperarAAnterior(CitacaoDAO.recuperarAAtual());
            Autor   autor   = AutorDAO.recuperarPorCitacao(citacao);
            
            this.lblTexto.setText(Formatador.formatarUsandoHtml(citacao.getTexto(), autor.getNome())); 
            
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null, "Erro ao procurar a nota anterior!", "Erro!", JOptionPane.ERROR_MESSAGE);
        }

    }

Num método chamado initComponents (que o Netbeans cria e que não pode ser alterado), o método privado é adicionado ao listener do JLabel:

lblAnterior.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                anterior(evt);
            }
        });

Note que o JLabel chamado lblAnterior é local ao método initComponents (ou seja, depois da execução desse método, essa variável deixa de existir e eu não tenho mais como acessá-la diretamente).

De uma outra classe qualquer (que tem acesso a instância do JFrame), eu preciso chamar esse evento via código Java. Como posso fazer isso? Eu consigo recuperar o JPanel, chamado Conteudo, sem problemas através de

mas a partir daí eu não sei como fazê-lo.

Agradeço qualquer sugestão.

Um abração.

3 Respostas

davidbuzatto

Sabe o método que é chamado ( anterior(evt); )? É só chamar ele na outra parte da aplicação, obtendo uma referência ao JFrame que tem o método.

Ai você me pergunta, e o ActionEvent? Se você não estiver usando o objeto evt dentro do seu método, é só vc chamar anterior( null );

Até mais!

reolca

Valeu pela resposta, Davi.

O problema é que o método é privado e é o Netbeans que o cria assim. Se eu mudo fora do Netbeans, quando eu reabro o projeto nele, ele reconstrói para privado.

Eu posso fazer uma gambiarra e colocar o que está dentro do anterior para um método público, mas queria ver se tinha alguma forma de eu disparar um evento via código.

De qualquer forma, muito obrigado.

reolca

Pessoal, resolvi o problema criando um método público e chamando este tanto do método privado quanto da outra classe.

Abração!

Criado 19 de julho de 2007
Ultima resposta 19 de jul. de 2007
Respostas 3
Participantes 2