Puoi risolvere con i Key Bindings ovvero associando un'azione particolare ad un determinato tasto (nel tuo caso il tasto TAB). Affinchè tutto funzioni però, devi escludere dal "focus traversal" il tuo componente altrimenti il sottosistema di gestione del focus "parte prima" della tua azione che quindi non verrà eseguita. Nella tua azione fai i tuoi controlli del caso e poi dovrai settare manualmente il focus sul successivo componente.
Codice PHP:
//Escludo il componente dalla gestione del focus
tuoTextField.setFocusTraversalKeysEnabled(false);
//Associo al tasto TAB l'action 'myTabAction'
tuoTextField.getInputMap().put(KeyStroke.getKeyStroke((char)KeyEvent.VK_TAB), "myTabAction");
tuoTextField.getActionMap().put("myTabAction", new AbstractAction("myTabAction") {
public void actionPerformed(ActionEvent e) {
//Fai i tuoi controlli
....
//Setta il focus sul successivo componente
if(controlloOk){
componenteSuccessivo.requestFocus();
}
}
});
Dai uno sguardo qui soprattutto all'inizio dove spiega, perchè in questo caso, è meglio utilizzare Key Bindings anzichè Key listeners