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 
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!