Verificar se algum componente perdeu o foco para disparar um metodo

Cada vez que um componente perde o foco, eu quero que o scrollbar seja movido para cima ou para baixo de acordo para onde o foco foi passado.
Fazer o método que faz essa rolagem eu já fiz agora preciso saber como ficar verificando se algum componente perdeu o foco. Gostaria de fazer isso sem ter que utilizar uma thread porque acho que elas meio chatas de controlar.

Se você criar um listener para o evento lostFocus em cada componente não funciona?

mas se eu tiver por exemplo uns 100 jTextField na minha tela eu teria que cria um evento pra cada um… acho que não ficaria muito bom.

Voce pode adicionar um listener pra todos os componentes que podem sofrer isso.

//Em um construtor por exemplo
{
componente.addFocusListener(listener);
campo.addFocusListener(listener);
etc.addFocusListener(listener);
texto.addFocusListener(listener);
}

private FocusAdapter listener = new FocusAdapter(){
public void focusLost(FocusEvent evt){
//chama um método.
}
}

Assim todos os FocusLost vao chamar o mesmo método.

Queria que ele verifica se cada vez que um foco passa - se para outro componente e então chama - se o método.
Mais ou menos assim :

if(componente.tranferioFoco){
rolaScrollbar()
}

queria ficar verificando isso e pegar todas as trocas de focos.

— Não tinha visto a postagem de cima . Vou tentar.

Vlw a todos que tentaram me ajudar :wink:

Voce nao precisa criar um listener pra cada objeto. Voce pode passar a mesma referencia dele a todos. A unica diferença vai ser que o evt.getSource() vai retornar o objeto que lançou o evento.

Mas como no seu caso nao importa qual perdeu entao voce nao precisa fazer nenhuma verificação.

Não entendi direito o que o método addFocusListener recebe de parâmetro. Lendo a api parece ser um tipo de evento ou estou errado?
:oops:

Ele recebe um FocusListener. A classe FocusAdapter implementa essa interface e voce pode sobreescrevers os métodos que quer usar. Assim voce nao fica com uma implementação de uma interface com uns 4 métodos em branco.

Cara não consegui fazer ainda, dessa forma:

Pegando a posição do componente onde está o foco e passando para o scrollbar descer ate aquela posição. So que não to conseguindo fazer isso direito.
Vou posta + - como estou fazendo :


float posicao;
posicao=JTextField.getAlignmentX();
JScrollPane.getAlignmentY(posicao);

Se alguem tiver uma forma melhor ou der um exemplo mais claro ( :roll: ) sobre a implementação que foi citada acima eu agradeço.

[quote=Marky.Vasconcelos]Voce pode adicionar um listener pra todos os componentes que podem sofrer isso.

//Em um construtor por exemplo
{
componente.addFocusListener(listener);
campo.addFocusListener(listener);
etc.addFocusListener(listener);
texto.addFocusListener(listener);
}

private FocusAdapter listener = new FocusAdapter(){
public void focusLost(FocusEvent evt){
//chama um método.
}
}

Assim todos os FocusLost vao chamar o mesmo método.[/quote]

Resolveu meu problema para habilitar e desabilitar botões como Editar Excluir quando a JTable ganha ou perde foco. Vlw

No meu caso, quando um jTextField de ID de conta bancaria perder o foco, preciso chamar um método onde ele verifica em uma ArrayList onde as contas estão cadastradas se ja existe alguma conta com aqla ID. Alguém conseguiria me ajudar? :upside_down_face:
To perdido em como fazer essa iteração na ArrayList