Descobrir onde esta o focus na tela

Pessoal, gostaria de saber se existe uma forma de saber em qual componente da tela o meu focus está. Digamos que eu tenha vários JtextFields na tela e quero saber em qual deles está o cursor, para assim gerar um evento, como devo proceder?

http://docs.oracle.com/javase/tutorial/uiswing/events/focuslistener.html
http://docs.oracle.com/javase/tutorial/uiswing/misc/focus.html

Desconfio que seu problema de focus, na verdade, é para validação. Se for isso, você precisa usar um InputVerifier:

http://docs.oracle.com/javase/tutorial/uiswing/misc/focus.html#inputVerification
http://docs.oracle.com/javase/7/docs/api/javax/swing/InputVerifier.html

Opa, blz cara?
Acho que não me expressei direito, tenho alguns JtextFields na tela, e preciso saber em qual deles está o cursor, dessa forma eu posso, por exemplo, pintar o background daquele text field selecionado, eu preciso de algo que me dê um retorno de qual text field o cliente selecionou, por isso pensei no cursor.

Ah, você precisa deixar o JTextField que está com o foco com uma borda de cor diferente? Pode derivar uma classe de JTextField que mude a cor da borda se ele estiver com foco. É melhor que você ficar “varrendo” os JTextFields e ver qual deles está com foco.

Isso, a ideia é essa, mas não estou sabendo como fazer para descobrir em qual text field meu focus está. Tem algum método pra ver isso?

Tente rodar o exemplo abaixo. É bem tosco, mas…

package guj;

import java.awt.Color;

public class ExemploJTextFieldComFoco extends JFrame {

    static class PaintFocusedJTextFieldFocusListener implements FocusListener {
        @Override
        public void focusGained(FocusEvent e) {
            if (e.getSource() instanceof JTextComponent) {
                ((JTextComponent) e.getSource()).setBackground(Color.RED);
            }
        }

        @Override
        public void focusLost(FocusEvent e) {
            if (e.getSource() instanceof JTextComponent) {
                ((JTextComponent) e.getSource()).setBackground(Color.WHITE);
            }
        }
    }

    private JTextField txt03;
    private JTextField txt02;
    private JTextField txt01;
    private JTextField txt04;
    private JTextField txt05;
    private JTextField txt06;
    private PaintFocusedJTextFieldFocusListener pftf = new PaintFocusedJTextFieldFocusListener();

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    ExemploJTextFieldComFoco frame = new ExemploJTextFieldComFoco();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     */
    public ExemploJTextFieldComFoco() {
        setBounds(100, 100, 450, 300);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        getContentPane().setLayout(new FlowLayout(FlowLayout.CENTER, 5, 5));
        getContentPane().add(getTxt01());
        getContentPane().add(getTxt02());
        getContentPane().add(getTxt03());
        getContentPane().add(getTxt04());
        getContentPane().add(getTxt05());
        getContentPane().add(getTxt06());
        getTxt01().addFocusListener(pftf);
        getTxt02().addFocusListener(pftf);
        getTxt03().addFocusListener(pftf);
        getTxt04().addFocusListener(pftf);
        getTxt05().addFocusListener(pftf);
        getTxt06().addFocusListener(pftf);
    }

    private JTextField getTxt03() {
        if (txt03 == null) {
            txt03 = new JTextField();
            txt03.setColumns(10);
        }
        return txt03;
    }

    private JTextField getTxt02() {
        if (txt02 == null) {
            txt02 = new JTextField();
            txt02.setColumns(10);
        }
        return txt02;
    }

    private JTextField getTxt01() {
        if (txt01 == null) {
            txt01 = new JTextField();
            txt01.setColumns(10);
        }
        return txt01;
    }

    private JTextField getTxt04() {
        if (txt04 == null) {
            txt04 = new JTextField();
            txt04.setColumns(10);
        }
        return txt04;
    }

    private JTextField getTxt05() {
        if (txt05 == null) {
            txt05 = new JTextField();
            txt05.setColumns(10);
        }
        return txt05;
    }

    private JTextField getTxt06() {
        if (txt06 == null) {
            txt06 = new JTextField();
            txt06.setColumns(10);
        }
        return txt06;
    }
}

Valeu mesmo cara! Era o que eu estava precisando mesmo ;D