Alterando JFileChooser (Avançado) [RESOLVIDO]

Olá a todos,

Estou com um problema… Tenho arquivos no meu Servidor… Os quais serão abertos através do JFileChooser…

Porém, o JFileChooser não deve possibilitar a navegação entre diretórios… Restringindo o usuario a abrir apenas os arquivos de extenção que estão no filtro, e que pertençam exclusivamente ao diretório já aberto por default…

Porém não estou encontrando nada parecido… Pelo menos pra eu ter uma noção… Então alguém tem alguma idéia?

Tipo, como eu desabilitaria os botões de atalho para o desktop, meus documentos, subir um diretorio…

Bom, fico grato desde já… E aguardo sugestões.

Obrigado =]

Quanto a navegação é “complicado” acho que apenas com uma regra de poder ler “apenas” o diretorio que você abre o JFileChooser. ( Isso em *unix é perfeitamente possivel )

Quanto aos arquivos acho que usando um Filter no FileChooser resolve, ou não ?

Espero que ajude. :wink:

Cara o unico jeito que eu achei de fazer isso foi assim :

Eu defini um diretorio inicial que o usuario nao vai poder mudar.
Ai eu adiciono um PropertyChangeListener e quando o evento for DIRECTORY_CHANGE_PROPERTY eu “seto” o diretorio corrente pro diretorio inicial.

Meio pedreiro, mas funcionou :smiley:

public void showFileChooser() { 
	
	final File initialdir = new File(".");		

	final JFileChooser fc = new JFileChooser(initialdir);		

	fc.addPropertyChangeListener(new java.beans.PropertyChangeListener() {
		public void propertyChange(java.beans.PropertyChangeEvent e) {
	        if (e.getPropertyName().equals(JFileChooser.DIRECTORY_CHANGED_PROPERTY)) {
	        	fc.setCurrentDirectory(initialdir);
	        }
		}
	});
		
	fc.setFileSelectionMode(JFileChooser.FILES_ONLY);
		
	javax.swing.filechooser.FileFilter filter = new javax.swing.filechooser.FileFilter() {			
		public boolean accept(java.io.File file) {
			if (file.isDirectory()) {
				return true;
			} else { 
				if(file.getName().endsWith(".txt")) { 
					return true; 
				}					
			}				
			return false;				
		}	
		
		public String getDescription() {
			return "Text File (*.txt)";
		}			
	}; 		
	
	fc.setFileFilter(filter);				
		
	if ( fc.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) {
		String filename = fc.getSelectedFile().getPath();
		log.info("Opening : " + filename);
		openAndLoadFile(filename);			
	}				
}	

Outra solucao :

package org.testes;

import javax.swing.*;

public class NewFileChooser {

	public NewFileChooser() { 
	
		JFileChooser fileChooser = new JFileChooser(new java.io.File("."));
		
		java.awt.BorderLayout bl = (java.awt.BorderLayout) fileChooser.getLayout();
        bl.getLayoutComponent(java.awt.BorderLayout.NORTH).setVisible(false);
		
		fileChooser.showOpenDialog(null);
		
        
	}	
		
	public static void main(String[] args) {
		new NewFileChooser();
	}
	
}

//Daniel

Essa sua segunda solução é excelente windsofhell!

Agora estou tentando aplica-la ao componente de atalhos de navegação =p (Desktop, Meus Documentos e etc).

Mas foi muito boa msm =D

Se alguem souber como capturar a barra de atalhos da esquerda do JFileChooser dê sua dica pra nós :wink:

Interessante é que esta barra de atalhos não pertence ao layout BorderLayout do componente… Se tiramos o componente localizado no WEST, é retornado NullPointerException (ou seja, nenhum Component), e se tiramos o componente do CENTER some apenas a tela de navegação de Files…

Mas vlw a ajuda keller e windsofhell!

Problema resolvido! :lol:

Solução:

[code]JFileChooser chooser = new JFileChooser(new File(“Seu Diretorio aqui”));
BorderLayout chooserLayout = (BorderLayout) chooser.getLayout();
chooserLayout.getLayoutComponent(BorderLayout.NORTH).setVisible(false);

//aqui está o X da questão ;D
chooser.getComponent(0).setVisible(false);

SeuFileFilter filter = new FileFilter();
chooser.setFileFilter(filter);[/code]

Muito obrigado pela força!