Dúvida sobre FileDialog

12 respostas
erico_kl

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…

12 Respostas

ViniGodoy

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?

T

setFilenameFilter

jessetsilva

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");

			}
}
ViniGodoy

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.

jessetsilva

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

ViniGodoy

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?

erico_kl

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…

ViniGodoy

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:

erico_kl

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…

erico_kl

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…

ViniGodoy

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");
    }
});
erico_kl

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…

Criado 18 de novembro de 2008
Ultima resposta 19 de nov. de 2008
Respostas 12
Participantes 4