Foco na caixa de texto de um JFileChooser

Alguém sabe como deixar o foco em um JFileChooser na caixa de texto que recebe o nome do arquivo?
Já tentei encontrar o JTextField da JFileChooser através de vários for’s pelo método getComponents() mas nada :frowning:
requestFocus(), grabFocus(), e nada.

Se alguém souber como me ajude por favor, agradeço desde já.

ninguém ? to precisando disso quem souber ajuda por favor.

dá pra fazer isso através de reflexão

Na verdade nem sei se precisa de reflexão, a questão principal é usar recursividade pra entrar nos componentes que estao contidos em outros componentes.

já tentei isso mas não acho o tal do JTextField de jeito nenhum, acho JPanels, JComboBoxes mas nada dele.

Exatamente. O text field está dentro de um JPanel.

Minha solução para o seu problema:

    /**
     * Finds the components that are instance of aclass contained in the Container c.
     * @param aclass   the class of the component to find.
     * @param c        the Container component where to search.
     * @param returnList  the list where found components will be added.
     */
    public static <T> void findComponents(final Class<T> aclass, final Container c, final List<T> returnList) {
        final Component[] components = c.getComponents();
        for (Component x : components) {
            // Tests if x is instance of aclass.
            if (aclass.isInstance(x)) {
                returnList.add((T)x);
            }
            // JComponents are containers.
            if (x instanceof Container) {
                findComponents(aclass, (Container) x, returnList);
            }
        }
    }

Exemplo de uso:

public static void main(String[] args) { JFileChooser fc = new JFileChooser(); List<JTextField> list = new LinkedList<JTextField>(); findComponents(JTextField.class, fc, list); list.get(0).setEditable(false); System.out.println(list); int opt = fc.showOpenDialog(null); System.out.println("selected option: "+opt); }

Cara realmente consegui, valeu mesmo!
Olha o que eu fiz:

[code]final List list = new LinkedList();
findComponents(JTextField.class, fileChooser, list);

    SwingUtilities.invokeLater(new Runnable() {
       public void run() {
           try {
               Thread.sleep(100);
           } catch(Exception e) {}
           list.get(0).requestFocus();
       }
    });

    int option = fileChooser.showDialog(NotepadFrame.this, "Salvar");[/code]

Aparentemente mesmo com a referência do JTextField na lista retornada por aquele método que busta o JTextField, eu não consigo requisitar o foco do componente sem ele estar presente na tela, por isso precisava de uma forma de requisitar esse foco depois que o JFileChooser aparece, o único modo que pude pensar foi lançando uma thread da GUI que executaria por volta de 100 milissegundos depois.
Não sei se esta forma que fiz foi a mais adequada mais funcionou. =)

Você está chamando o JFileChooser a partir daonde?

Eu quando abro um JFileChooser já vejo o foco no JTextField.

Não acho uma boa idéia criar uma Thread para isso… Deve haver uma forma menos gambiarrosa.

O JFileChooser está como uma variável de instância do meu objeto.
Então também pensei isso é muita gambiarra, mas se você está falando que já aparece o foco direto no seu vou tentar aqui novamente!