lina:
Oi,
A ordem do foco para os componentes é a ordem pelo qual os mesmos são adicionados no container.
É verdade, tinha me esquecido disso...
Um problema ao utilizar o lostFocus para isso é se o gainedFocus tbm estiver sendo utilizado.
Se tiver 3 campos (campo1, campo2, campo3, adicionados nessa ordem mas a ordem desejada é campo1, campo3, campo2) e fizer o controle pelo lostFocus, ao trocar o foco do campo1, ele irá disparar o lostFocus do campo1, gainedFocus do campo2, lostFocus do campo2 e gainedFocus do campo3
JPanel panel = new JPanel(new GridLayout(5,1));
final JTextField field1 = new JTextField("1");
final JTextField field2 = new JTextField("2");
final JTextField field3 = new JTextField("3");
class FFocus implements FocusListener{
public void focusGained(FocusEvent e) {
if(!e.isTemporary()){
JTextField source = (JTextField)e.getSource();
System.out.println("FocusGained" + source.getText());
}
}
public void focusLost(FocusEvent e) {
if(!e.isTemporary()){
JTextField source = (JTextField)e.getSource();
System.out.println("FocusLost" + source.getText());
if((source).getText().equals("1")){
field3.requestFocus();
} else if((source).getText().equals("2")){
System.out.println("EU PERDI O FOCO!!! Sou o field 2");
//field1.requestFocus();
//Só não entra em loop pq está comentado... mas o foco acaba não indo pra quem devia...
} else if((source).getText().equals("3")){
//Em teoria, field2 não receberia focus. Logo não perderia o mesmo, correto?
field2.requestFocus();
}
}
}
}
field1.addFocusListener(new FFocus());
field2.addFocusListener(new FFocus());
field3.addFocusListener(new FFocus());
panel.add(field1);
panel.add(field2);
panel.add(field3);
Ao fazer na unha, deve-se lembrar do foco invertido (Shift+TAB), lembrando que alguns campos, o controle de tab é diferente (JTextArea usa Ctrl+TAB pra trocar de foco e Shift+Ctrl+TAB para o foco inverso).