Olá…
Gostaria de saber como faço pra adicionar filtro de extensões no FileDialog (do pacote AWT). Por exemplo: Gostaria que o usuário só pudesse abrir imagens (jpg, gif, png…). Alguém saberia dizer?
Desde já, Obrigado…
Dúvida sobre FileDialog
12 Respostas
Use o método setFileNameFilter:
http://java.sun.com/j2se/1.4.2/docs/api/java/awt/FileDialog.html#setFilenameFilter(java.io.FilenameFilter)
Mas… por que você não está usando o Swing?
vc vai precisar implementar ul FileFilter com os tipos de extensões que vc quer
tipo :
class Filter extends FileFilter {
public boolean accept(File arg0) {
return arg0.isDirectory()|| arg0.getName().toLowerCase().endsWitth(".jpeg")
|| arg0.getName().toLowerCase().endsWith(".bmp");
}
}
Isso para o caso do Swing. Ele pediu específico da AWT, mas a implementação é muito muito parecida com a sua.
Aliás, para o Swing, já existe uma classe de filtro pronta, se o problema é a extensão. Chama-se FileNameExtensionFilter e foi inserida no Java 6.
Isso para o caso do Swing. Ele pediu específico da AWT, mas a implementação é muito muito parecida com a sua.
Aliás, para o Swing, já existe uma classe de filtro pronta, se o problema é a extensão. Chama-se FileNameExtensionFilter e foi inserida no Java 6.
é verdade, não percebi este detalhe hehe. falndo nisso, vou até dar uma estudada sobre o FileNameExtensionFilter . Vlw
Aliás, uma das minhas grandes queixas em relação ao Swing é que demora demais para eles acrescentarem essas classes práticas, como essa. Por exemplo, não deveria já haver um FixedLengthDocument implementado em algum lugar para deixar um JTextField com limite máximo de caracteres?
Eu não uso o swing (JFileChooser) pq este vem com um bug…
Se eu seleciono um arquivo pela parte combobox (não somente clicando no arquivo) aparece um erro de execução ‘Unable to bind’.
Por isso prefiro usar a classe do pacote AWT…
Não consegui reproduzir o problema aqui. Você usa o Java 6?
Pode descrever melhor como faço para simular?
Aí não corro o risco de deixar o meu código com o mesmo bug. :shock:
Nunca usei o FilenameFilter, por isso a pergunta idiota:
Como seria a implementação dessa classe para um arquivo jpg, por exemplo, pois o metodo setFilenameFilter requer um parametro FilenameFilter.
vlw…
Pra simular o erro:
Só tente escolher o arquivo na parte superior, onde diz ‘Look in’. Pra mim essa classe está bugada pois tenho um programa que baxei desenvolvido em java que tambem ocupa o JFileChooser e acontece a mesma coisa…
Aquela combobox é só para escolher a unidade de disco, não o arquivo.
Não consegui simular o problema aqui. Seu Windows é o Vista?
A versão do seu Java está atualizada?
Porque achei esse bug aqui:
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6486626
Que se refere ao problema que você está tendo, mas foi corrigido nas últimas versões do Java.
Anyway, para usar o FileNameFilter, basta criar uma classe que implementa essa interface. A forma mais fácil de se fazer isso é com uma inner class anônima. Por exemplo, para fazer um filtro pelas extensões jpg ou jpeg, desconsiderando maiúsculas e minúsculas você faria:
dialog.setFilenameFilter(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
String lowerName = name.toLowerCase();
return lowerName.endsWith("jpg") || lowerName.endsWith("jpeg");
}
});
Essa classe que você implementou creio eu que seja para testar o arquivo depois de selecionado…
Não há alguma maneira de eu testar isso antes e lá na combo ‘Tipo’ ao invés de eu ter ‘All Files’ eu tivesse ‘Arquivos de imagens (jpg, gif, png…)’??
Obrigado novamente…