Capturar nome do componente que ativou o evento focusLost

2 respostas
G

Pessoal,
Como eu faço para capturar/identificar um componente que tenha ativado o evento focusLost ou focusGained?

Na classe visão eu tenho esse método que define os listeners:
public void configuraOuvinte(ActionListener ouvinte, MouseListener ouvinteMouse, FocusListener ouvinteFoco)
{
    jButtonAlterar.addActionListener(ouvinte);
    jButtonCancelar.addActionListener(ouvinte);
    jTableListagem.addMouseListener(ouvinteMouse);
    jTextFieldItem.addFocusListener(ouvinteFoco);
}
Na classe controle, para os eventos de botão uso esse método com o qual consigo saber qual botão disparou o evento (Lembrando que a propriedade actionCommand dos botões foram setadas com o nome que está sendo pesquisado nesse método):
public void actionPerformed(ActionEvent e)
{
    String comando = e.getActionCommand();

    if (comando.equalsIgnoreCase("Cancelar"))
    {
        // O botão Cancelar foi clicado.
    }
}
No focusLost não consigo utilizar o argumento "e" para capturar informações que ajudem a distinguir qual componente ativou..
public void focusLost(FocusEvent e)
{
    displayMessage("Focus lost", e);
}

Obrigado!

2 Respostas

ViniGodoy

Nem com o método e.getSource()?

Nesse caso você pode testar a classe dele (getSource().getClass()) e o nome dele (getSource().getName()).

G
Vini, é mais ou menos por ai. Fiz umas pesquisas consegui descobrir que uma das maneiras de funcionar é assim:
public void focusLost(FocusEvent e)
{
    Object obj = e.getSource();

    if (obj.equals(this.jTextFieldValor))
    {
        \\ Realizar o cálculo aqui
    }

}
Se comparar o e.getSource diretamente com o componente é possível verificar quem ativou o evento.

O problema é que esse exemplo funciona na classe Visao e estou querendo fazer esse cálculo na classe de Controle. Do Controle não tenho acesso ao componente jTextFieldValor a não ser por get e set.

Acredito que o ideal para o meu caso seria na classe Visao fazer algo do tipo:
this.jTextFieldValor.setActionCommand("AtivarCalculoValor");
e na classe controle: String acao = e.getActionCommand() para saber qual foi o comando ativado, mas aparentemente isso não pode ser feito no FocusEvent.

Por hora vou deixar o cálculo na classe visão mesmo, mas se alguém tiver alguma ideia eu agradeço.

Abraço!

Criado 20 de abril de 2010
Ultima resposta 22 de abr. de 2010
Respostas 2
Participantes 2