Cancelar fechamento JFileChooser

1 resposta
levimendes

Olá pessoal,

Alguém sabe me dizer como eu faço para cancelar o fechamento de uma janela JFilleChooser?
Pois no funcionamento default dela, independente do que seja informado na caixa de texto disponível, a janela é encerrada.

public static void main(String[] args) {
		JFileChooser chooser = new JFileChooser();
		chooser.showSaveDialog(null);
		
		//Não feche a janela caso o nome do arquivo seja inválido (um método meu que retorna um boolean)
		if (isNomeArquivoInvalido()) {
			//O que devo colocar aqui para que a janela não seja fechada????????
		}
	}

1 Resposta

TerraSkilll

Olá, levimendes.

Até onde sei (meu conhecimento em Java ainda é pouco), o seu código para na linha chooser.showSaveDialog(null); e fica aguardando até que a caixa de seleção de arquivo seja fechada (tendo sido ou não selecionado um arquivo). Ou seja, quando seu código chega na linha if (isNomeArquivoInvalido()), o JFileChooser já está fechado (consequentemente, você não pode cancelar o fechamento de algo que já está fechado).

Possíveis soluções seriam (novamente, considerando que sei pouco de Java):
1 - executar o showSaveDialog várias vezes até ter uma arquivo válido. Essa solução me parece bem inadequada, além de “deselegante”. Mais ou menos assim:

public static void main(String[] args) {
		JFileChooser chooser = new JFileChooser();
		String filename = "";
		
		//Não feche a janela caso o nome do arquivo seja inválido (um método meu que retorna um boolean)
		while (! isNomeArquivoInvalido(filename)) {
			chooser.showSaveDialog(null);
			filename = chooser.getName();
			// poderia ser também
			//filename = chooser.getSelectedFile().getAbsolutePath();
		}
	}

2 - criar seu próprio FileChooser (sobrescrever o JFileChooser). Você poderia alterar métodos como o accept() e cancelSelection(), para não fecharem a janela (me foge como fazer isso);
3 - talvez alterar o FileFilter do seu JFileChooser também ajude, já que limitaria as possíveis seleções que o usuário poderia fazer;

Abraço.

Criado 18 de outubro de 2011
Ultima resposta 19 de out. de 2011
Respostas 1
Participantes 2