JFileChooser

Olá pessoal do GUJ!!!

Estou mexendo com o JFileChooser, o filtro funcionou legal, consegui traduzir praticamente toda a janela também. Mas não estou conseguindo fazer o salvar obrigar o usuário a salvar em determinada extensão. Como faço para antes de usar o

mudar o nome do arquivo selecionado colocando a extensão desejada?

E como faço pra colocar no campo em que ele vai salvar algo do tipo: *.txt para ele já saber que irá salvar em txt, por exemplo?

Muito obrigado pessoal!

Um grande abraço a todos!

inté,

Já saquei galera. É que eu tava salvando no path errado… duh! :smiley:

Já já eu posto o código como ficou…

O código fica assim:


String nome = fileChooser.getSelectedFile().getPath();
nome += ".ppl";
File fileName = new File(nome);

Mas ainda gostaria de saber como faço para colocar um valor inicial no campo salvar. Para no caso de por exemplo o arquivo já existir e o usuário querer apenas atualizar então eu coloco o nome do arquivo existente naquele campo. Alguém sabe como faço isso?

Valeu!
inte,

Ligeiramente off-topic

Uma coisa que muita gente reclama quando se usa JFileChooser é que os botões, mensagens etc. estão em inglês. (Não testei isso no Windows em português, mas não acho que ele “magicamente” corrija isso - o suporte para português não é tão detalhado quanto o suporte para inglês, e além disso muitas vezes o cliente usa o Windows em inglês por algum motivo…)
Isso dá para corrigir de duas maneiras:

  • Ou alterar o arquivo swing.properties;
  • Ou alterar as seguintes propriedades antes de criar o JFileChooser (bom, está o mais parecido com o Windows XP em português, não sei se tem algo faltando…):
	UIManager.put("FileChooser.lookInLabelMnemonic", new Integer('E'));  
	UIManager.put("FileChooser.lookInLabelText", "Examinar");
	UIManager.put("FileChooser.saveInLabelText", "Salvar em");
	
	UIManager.put("FileChooser.fileNameLabelMnemonic", new Integer('N'));  // N
	UIManager.put("FileChooser.fileNameLabelText", "Nome do arquivo"); 
	
	UIManager.put("FileChooser.filesOfTypeLabelMnemonic", new Integer('T'));  // T
	UIManager.put("FileChooser.filesOfTypeLabelText", "Tipo"); 
	
	UIManager.put("FileChooser.upFolderToolTipText", "Um nível acima");
	UIManager.put("FileChooser.upFolderAccessibleName", "Um nível acima"); 
	
	UIManager.put("FileChooser.homeFolderToolTipText", "Desktop");
	UIManager.put("FileChooser.homeFolderAccessibleName", "Desktop"); 
	
	UIManager.put("FileChooser.newFolderToolTipText", "Criar nova pasta");
	UIManager.put("FileChooser.newFolderAccessibleName", "Criar nova pasta"); 
	
	UIManager.put("FileChooser.listViewButtonToolTipText", "Lista"); 
	UIManager.put("FileChooser.listViewButtonAccessibleName", "Lista"); 
	
	UIManager.put("FileChooser.detailsViewButtonToolTipText", "Detalhes"); 
	UIManager.put("FileChooser.detailsViewButtonAccessibleName", "Detalhes"); 

	UIManager.put("FileChooser.fileNameHeaderText", "Nome");
	UIManager.put("FileChooser.fileSizeHeaderText", "Tamanho");
	UIManager.put("FileChooser.fileTypeHeaderText", "Tipo");
	UIManager.put("FileChooser.fileDateHeaderText", "Data");
	UIManager.put("FileChooser.fileAttrHeaderText", "Atributos");

Só não dá para alterar o nome de “My Computer” ou “My Documents” se estiver usando o Windows em inglês, porque esses nomes são retornados pelo próprio Windows.

Ta até ai tudo bem.

Mas e pra mudar oque aparece nos botões???

http://www.rgagnon.com/javadetails/JavaUIDefaults.txt

Desculpa por desenterrar esse tópico, mas como eu uso o JavaUIDefaults thingol???

[quote=bertoncio]Ta até ai tudo bem.

Mas e pra mudar oque aparece nos botões???[/quote]

vai ai o codigo pra mudar o que aparece nos botões!

UIManager.put("FileChooser.openButtonToolTipText", "Abrir");
UIManager.put("FileChooser.openButtonAccessibleName", "Abrir");
UIManager.put("FileChooser.openButtonText", "Abrir");

Retomando este tópico para um detalhe que ficou faltando:
Quando clicamos com o botão direito na caixa de diálogo “Abrir Arquivo” é mostrado um popup em inglês, sabem qual o nome que uso para traduzir aquilo no UIManager?

[quote=wellington7]Retomando este tópico para um detalhe que ficou faltando:
Quando clicamos com o botão direito na caixa de diálogo “Abrir Arquivo” é mostrado um popup em inglês, sabem qual o nome que uso para traduzir aquilo no UIManager?[/quote]
Para facilitar a vida de muita gente, eu criei uma classe que traduz a classe JFileChooser compreta e tou disponibilizando a vocês, o é só fazer o download do arquivo zip, extrair e add no classpath do seu projeto.

http://www.4shared.com/file/241680083/6fd7feb6/jfilechooser_pt.html

Para traduzir usar é muito fácil, a classe só existe o método static “traduzir”, então antes de você instanciar o objeto JFileChooser chame o meto traduzir assim:

Para setar o titulo do objeto JFileChooser instanciado faça:

Espero ter ajudo alguém de alguma forma! Responde aí se isso ajudou!

claro que não ajudou meu caro… não quero ficar dependente de vc pra atulizar o jar

Resolvido:

import java.awt.Frame;
import java.awt.FileDialog;

public class TEST {
    
    public static void main(String[] args) {
	FileDialog fileDialog = new FileDialog((Frame)null);
	fileDialog.setVisible(true);
    }
    
}

O FileDialog cria a dialog nativa para abrir,

agora só falta dar um jeito de centralizar… :slight_smile:

Beleza Pessoal tenho aqui uma tradução completa da JFileChooser OK

		UIManager.put("FileChooser.directoryOpenButtonText","Abrir");
		UIManager.put("FileChooser.directoryOpenButtonToolTipText","Abrir diretório selecionado");
		
		UIManager.put("FileChooser.openButtonToolTipText", "Selecionar");
		UIManager.put("FileChooser.openButtonAccessibleName", "Selecionar");
		UIManager.put("FileChooser.openButtonText", "Selecionar");

		UIManager.put("FileChooser.cancelButtonToolTipText", "Cancelar");
		UIManager.put("FileChooser.cancelButtonAccessibleName", "Cancelar");
		UIManager.put("FileChooser.cancelButtonText", "Cancelar");

		UIManager.put("FileChooser.saveButtonText", "Salvar");
		UIManager.put("FileChooser.saveButtonToolTipText", "S");
		UIManager.put("FileChooser.saveButtonToolTipText", "Salvar");

		UIManager.put("FileChooser.updateButtonText", "Alterar");
		UIManager.put("FileChooser.updateButtonToolTipText", "A");
		UIManager.put("FileChooser.updateButtonToolTipText", "Alterar");

		UIManager.put("FileChooser.helpButtonText", "Ajuda");
		UIManager.put("FileChooser.helpButtonToolTipText", "A");
		UIManager.put("FileChooser.helpButtonToolTipText", "Ajuda");

		UIManager.put("FileChooser.lookInLabelMnemonic", new Integer('E'));
		UIManager.put("FileChooser.lookInLabelText", "Examinar");
		UIManager.put("FileChooser.saveInLabelMnemonic", new Integer('S'));
		UIManager.put("FileChooser.saveInLabelText", "Salvar em");

		UIManager.put("FileChooser.fileNameLabelMnemonic", new Integer('N')); // N
		UIManager.put("FileChooser.fileNameLabelText", "Nome do Arquivo");

		UIManager.put("FileChooser.filesOfTypeLabelMnemonic", new Integer('T')); // T
		UIManager.put("FileChooser.filesOfTypeLabelText", "Tipo");

		UIManager.put("FileChooser.upFolderToolTipText", "Um nível acima");
		UIManager.put("FileChooser.upFolderAccessibleName", "Um nível acima");

		UIManager.put("FileChooser.homeFolderToolTipText", "Desktop");
		UIManager.put("FileChooser.homeFolderAccessibleName", "Desktop");

		UIManager.put("FileChooser.newFolderToolTipText", "Criar nova pasta");
		UIManager
				.put("FileChooser.newFolderAccessibleName", "Criar nova pasta");

		UIManager.put("FileChooser.listViewButtonToolTipText", "Lista");
		UIManager.put("FileChooser.listViewButtonAccessibleName", "Lista");

		UIManager.put("FileChooser.detailsViewButtonToolTipText", "Detalhes");
		UIManager.put("FileChooser.detailsViewButtonAccessibleName", "Detalhes");

		UIManager.put("FileChooser.fileNameHeaderText", "Nome");
		UIManager.put("FileChooser.fileSizeHeaderText", "Tamanho");
		UIManager.put("FileChooser.fileTypeHeaderText", "Tipo");
		UIManager.put("FileChooser.fileDateHeaderText", "Data");
		UIManager.put("FileChooser.fileAttrHeaderText", "Atributos");

		UIManager.put("FileChooser.acceptAllFileFilterText","Todos os Arquivos");

Espero que ajude quem está com alguma duvida

Aqui embaixo vai algumas funções que vão no próprio JFileChooser

JFileChooser abrir = new JFileChooser("\\");
abrir.setMultiSelectionEnabled(false); // Permição de Multiseleção
abrir.setFileSelectionMode(JFileChooser.FILES_ONLY);// Seleciona apenas Arquivos

abrir.setSelectedFile(new File("S_PA.DBF"));// Indica provavel nome para o arquivo

// Coloca a extenção preferencial por ultimo
abrir.addChoosableFileFilter(extencao(2));
abrir.addChoosableFileFilter(extencao(1));

abrir.setDialogTitle("Localizar Arquivo que Contém as APAC");

Agora estou colocando uma função que pode auxiliar na hora de escolher um arquivo com uma determinada extenção

// Lista de Extenções para se Usar
	public javax.swing.filechooser.FileFilter extencao(int extencoes) {

		switch (extencoes) {
		case 1:
			return new javax.swing.filechooser.FileFilter() {
				// Filtro, converte as letras em minúsculas antes de comparar
				public boolean accept(File f) {
					return f.getName().toLowerCase().endsWith(".dbf")
							|| f.isDirectory();
				}

				// Texto que será exibido para o usuário
				public String getDescription() {
					return "Arquivos de Banco de Dados (.dbf)";
				}

			};
		case 2:
			return new javax.swing.filechooser.FileFilter() {
				// Filtro, converte as letras em minúsculas antes de comparar
				public boolean accept(File f) {
					return f.getName().toLowerCase().endsWith(".jpg")
							|| f.isDirectory();
				}

				// Texto que será exibido para o usuário
				public String getDescription() {
					return "Arquivos de imagem (.jpg)";
				}
			};
		}
		return null;
	}

Bem de minha parte era isso espero que o pessoal por meio desse tutorial possa se guia blz bons estudos :idea:

Boa noite pessoal, estou usando este método e ele está funcionando perfeitamente; mas ao inserir a imagem desejada em meu JFrame, o mesmo altera de tamanho. Como faço para não alterar o tamanho de meu JFrame quando insiro a imagem em um JLabel?

Segue meu código:


        JFileChooser fileChooser = new JFileChooser();   //Cria o objeto do tipo Janela JFileChooser  
        fileChooser.setDialogTitle("Escolha a Foto");  //Define o título do JFileChooser  
        fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);  //Define que só serão abertos arquivos  
   try {
      if (fileChooser.showOpenDialog(this) == JFileChooser.APPROVE_OPTION)  
        {  
             File arquivo = fileChooser.getSelectedFile();//arquivo  
             BufferedImage bi =ImageIO.read(arquivo); //carrega a imagem real num buffer
             BufferedImage aux = new BufferedImage(100, 80, bi.getType());//cria um buffer auxiliar com o tamanho desejado  
             Graphics2D g = aux.createGraphics();//pega a classe graphics do aux para edicao  
             AffineTransform at = AffineTransform.getScaleInstance((double) 100 / bi.getWidth(), (double) 80 / bi.getHeight());//cria a transformacao  
             g.drawRenderedImage(bi, at);//pinta e transforma a imagem real no auxiliar  
             LFoto.setIcon(new ImageIcon(aux));//seta no jlabel 
             LFoto.setText(null);
        }
              } catch (IOException ex) {
                Logger.getLogger(Cad_pessoa.class.getName()).log(Level.SEVERE, null, ex);
            }

Olha, eu acho que a linha 12 num faz o que tu pensa que ela faz não. Mesmo que tu desenha imagem num tamanho menor, num quer dizer a imagem em si vai diminuir. É como imprimir uma foto num papel e depois imprimira mesma foto no mesmo papel em tanho reduzido. A foto fica menor, mas não altera o tamanho do papel. Aplique os método da variável aux para conseguir uma imagem de tamnho reduzido.

Além disso, o meodo setResizable(false) no jframe deve dar conta do “serviço” pra garantir que o tamanho não se altere.