Erro na sequencia de focus usando o TAB

Estou usando esse código para ir para o próximo jTextField

txt_Data.addFocusListener(new FocusListener() {
            @Override
            public void focusLost(FocusEvent e) {
                txt_ID_Ordem_Producao.requestFocus();
            }
            @Override
            public void focusGained(FocusEvent e) {
            }
        });

Dessa forma o focus esta indo para outra jTextField vai para a quantidade e não para o ID_Ordem_Producao e quando eu faço a sim ele funciona coretamente.

txt_Data.addFocusListener(new FocusListener() {
            @Override
            public void focusLost(FocusEvent e) {
                JOptionPane.showMessageDialog(null, "0");
                txt_ID_Ordem_Producao.requestFocus();
            }
            @Override
            public void focusGained(FocusEvent e) {
            }
        });

Estranho acontecer isso, não tem algo que acontece antes que pega o Focus da aplicação? Bom mas enfim, eu achei que você queria só setar o Focus em um campo, isso resolveria sem maiores esforços, mas se você vai ficar puxando foco pra lá e pra cá, sugiro que você implemente um FocusTraversalPolicy definindo a ordem dos componentes do cycle root.
Você precisaria implementar esta classe, que vai determinar esta ordem.
E aqui um exemplo do Java mostrando como ela funciona, você pode copiar o código da classe que implementa o FocusTraversalPolicy deste exemplo do java, esta classe que recebe no construtor um Vector de Components que vai dizer a ordenação dos componentes, do primeiro ao último adicionado, conforme a implementação da classe.
E é claro, o how to do Java explicando o funcionamento do Focus em uma aplicação, sugiro que leia para entender melhor o seu funcionamento.