Arquivos JFileChooser

10 respostas
M

Bom dia pessoal. Preciso de uma ajuda de vocês. Eu gostaria de saber como faço para pegar todos os arquivos que estão sendo exibidos para o usuário selecionar no JFileChooser.

Por exemplo, na imagem abaixo eu gostaria de obter em uma lista ou em um vetor os arquivos 1,2,3,4 e 5. Mas eu preciso disso no extamo momento que o usuário entra na pasta. Se alguém souber de alguma solução, por favor, compartilhe com todos.

10 Respostas

M

Consegui alguns avanços aqui. Mas ainda falta a última parte.

Eu tenho o nome dos arquivos que eu quero que não apareçam no JFileChooser, em objetos da classe File. Alguém sabe como eu faço para através desses objetos dizer que eu não quero que eles apareçam no JFileChooser?

Explicando melhor: quero dizer ao JFileChooser os arquivos que ele não deve exibir. Tem como?

ViniGodoy

Crie para isso um FileFilter:
http://java.sun.com/docs/books/tutorial/uiswing/components/filechooser.html#filters

Aí basta fazer o método accept retornar false no arquivos que você não quer exibir.

M

Já existe um FileFilter. O meu problema é que ele precisa diferenciar arquivos com a mesma extensão. To quase louco aqui já. Já consigo ler a diferença entre dois arquivos de mesma extensão, só preciso de um jeito para o JFileChooser não exibir os diferentes.

ViniGodoy

Vai ser algo do tipo:

public class RestrictedFileFilter extends FileFilter { 
    private Set<File> restricted;

    public RestrictedFileFilter(Set<File> restricted) {
        this.restricted = new HashSet<File>(restricted);
    }

    public boolean accept(File f) {
        return !restricted.contains(f);
    }
    public String getDescription() {
        return "Allowed files";
    }
}
Aí no seu código:
seuFileChooser.setFileFilter(seuSetDeArquivosRestritos);
ViniGodoy

O que exatamente vc quer fazer?!?!?!?

M

Digamos que se tenha um aplicativo que gera a folha de pagamento dos funcionários de uma escola. E você pode salvar isso em um arquivo com a extensão “.func”. Porém… existem professores,secretários,diretor,etc. em uma escola. Para cada um deles o sistemas muda algumas propriedades. Porém todos eles tem seus arquivos salvos com a extensão “.func”.

Ai é que vem o problema: na hora de abrir, eu não posso deixar que um arquivo com dados de um professor seja aberto onde deveria ser aberto um de diretor. Não sei o que fazer… FileFilter só filtra a extensão, o que não me adianta, pois todos tem a mesma extensão.

Tá complicado… Com alguns ajustes(provaveis gambiarras), consegui implementar de tal modo que ele consiga a lista dos arquivos que não devem ser exibidos em objetos da classe File. Só que agora não sei como ocultá-los no JFileChooser…

Rapaz, não sei mais o que fazer com isso. Já tentei quase tudo que você possa imaginar. Qualquer ajuda será de grande valia.

ViniGodoy

Mas quem disse que o FileFilter só filtra a extensão? Ele te passa um File e você tem que dizer se esse file deve ser exibido ou não. Se você tem a lista de arquivos a serem barrados, basta retornar false sempre que um arquivo desses aparecer.

A extensão é apenas um dos critérios possíveis, nada impede você de criar um critério muito mais rebuscado.

M

ViniGodoy:
Mas quem disse que o FileFilter só filtra a extensão? Ele te passa um File e você tem que dizer se esse file deve ser exibido ou não. Se você tem a lista de arquivos a serem barrados, basta retornar false sempre que um arquivo desses aparecer.

A extensão é apenas um dos critérios possíveis, nada impede você de criar um critério muito mais rebuscado.

Não sabia… pelo visto estava fazendo totalmente errado :oops:

Outra coisa: no seu exemplo você utilizou a interface FileFilter. Aqui estou usando a classe abstrata. Muda algo?

ViniGodoy

Se você não quiser alterar o seu FileChooser de extensões, uma boa é fazer um decorator:

import java.io.File;
import java.util.HashSet;
import java.util.Set;

import javax.swing.filechooser.FileFilter;

public class RestrictedFileFilter extends FileFilter { 
    private Set<File> restricted;
    private FileFilter decorated;
    

    public RestrictedFileFilter(Set<File> restricted, FileFilter decorated) {
        this.restricted = new HashSet<File>(restricted);
        this.decorated = decorated;
    }

    @Override
    public boolean accept(File f) {
        return !restricted.contains(f) && decorated.accept(f);
    }
    @Override
    public String getDescription() {
        return decorated.getDescription();
    }
}
E aí vc usa assim:
FileNameFileChooser fnfc = new FileNameFileChooser("Funcionários", ".func");
RestrictedFileChooser restr = new RestrictedFileChooser(funcionariosRestritos, fnfc);
seuFileChooser.setFileChooser(restr);
M

Obrigado pela ajuda Vini, vou testar aqui e lhe digo o resultado :wink:

Criado 17 de novembro de 2008
Ultima resposta 17 de nov. de 2008
Respostas 10
Participantes 2