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.
C
ceklock
dá pra fazer isso através de reflexão
C
ceklock
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.
W
Will_HRock
já tentei isso mas não acho o tal do JTextField de jeito nenhum, acho JPanels, JComboBoxes mas nada dele.
C
ceklock
Exatamente. O text field está dentro de um JPanel.
C
ceklock
Minha solução para o seu problema:
/***FindsthecomponentsthatareinstanceofaclasscontainedintheContainerc.*@paramaclasstheclassofthecomponenttofind.*@paramctheContainercomponentwheretosearch.*@paramreturnListthelistwherefoundcomponentswillbeadded.*/publicstatic<T>voidfindComponents(finalClass<T>aclass,finalContainerc,finalList<T>returnList){finalComponent[]components=c.getComponents();for(Componentx:components){// Tests if x is instance of aclass.if(aclass.isInstance(x)){returnList.add((T)x);}// JComponents are containers.if(xinstanceofContainer){findComponents(aclass,(Container)x,returnList);}}}
C
ceklock
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);
}
W
Will_HRock
Cara realmente consegui, valeu mesmo!
Olha o que eu fiz:
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. =)
C
ceklock
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.
W
Will_HRock
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!