JFileChooser selecionando Pasta

3 respostas
T

Olá,

nas classes abaixo eu seleciono uma pasta, porém eu tenho que selecionar duas vezes para a pasta abrir. O que está acontecendo?

EscolhePasta.java
import java.io.*; 
import javax.swing.JFileChooser; 

public class EscolhePasta { 
    
    public static String escolheArquivo(){ 
          
          String arquivoWave;    
          JFileChooser arquivo = new JFileChooser();    
          arquivo.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);  
          
          if(arquivo.showOpenDialog(arquivo) == JFileChooser.APPROVE_OPTION){ 
              arquivoWave = arquivo.getSelectedFile().getPath(); 
          }        
          
          else{ 
              arquivoWave = ""; 
              
          } 
          
          
          return arquivoWave; 
          } 

    
    public static void main(String[] args){ 
       
      if(!escolheArquivo().equals("")){ 
          
         File arq = new File(escolheArquivo()); 

         File[] arquivos = arq.listFiles(new FiltroWave()); 
          
         for(int i=0;i<arquivos.length;i+=10){ 
            String s = arquivos[i].getName(); 
            s = s.substring(0,(s.length()-6)); 
            System.out.println(s); 

         } 
      } 

       
    } 
    
  
}
FiltroWave.java
import java.io.*; 
class FiltroWave implements FilenameFilter{ 

      public boolean accept(File dir, String name) { 
         boolean a = name.endsWith(".wav") ; // método que realmente faz o trabalho :-P 
         
          return a; 
       
      } 

   }

3 Respostas

D

Olá thiagocs, bom dia,

da uma olhada nesse exemplo, pode ajudar vc… O programa abre uma janela JFileChooser e permite vc escolher uma imagem. A imagem selecionada é mostrada em um JLabel.

import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import java.beans.*;
import java.util.*;
import java.io.*;
import javax.swing.*;
import javax.swing.filechooser.FileFilter;
import javax.swing.filechooser.FileView;

public class FileChooserTeste {
	
	public static void main(String[] args) {
	
		ImageViewerFrame frame = new ImageViewerFrame();
		frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
		frame.setVisible( true );
		
	}

}

class ImageViewerFrame extends JFrame{
	
	public ImageViewerFrame(){
		
		setTitle("ImageViewerTeste");
		setSize( DEFAULT_WIDTH, DEFAULT_HEIGHT );
		
		JMenuBar menuBar = new JMenuBar();
		setJMenuBar( menuBar );
		
		JMenu menu = new JMenu("Open");
		menuBar.add( menu );
		
		JMenuItem openItem = new JMenuItem("Open");
		menu.add( openItem );
		openItem.addActionListener( new FileOpenListener() );
		
		JMenuItem exitItem = new JMenuItem("Exit");
		menu.add( exitItem );
		exitItem.addActionListener( new ActionListener(){
			public void actionPerformed( ActionEvent event ){
				System.exit(0);
			}
		});
		
		label = new JLabel();
		add( label );
		
		chooser = new JFileChooser();
		
		// definir extenções de imagens visiveis
		
		final ExtensionFileFilter filter = new ExtensionFileFilter();
		filter.addExtension("jpg");
		filter.addExtension("jpeg");
		filter.addExtension("gif");
		filter.setDescription("Image files");
		
		chooser.setFileFilter( filter );
		chooser.setAccessory( new ImagePreviewer(chooser));
		chooser.setFileView( new FileIconView( filter, new ImageIcon("palette.gif")));
		
	}
	
	private class FileOpenListener implements ActionListener{
		
		public void actionPerformed( ActionEvent event ){
			
			chooser.setCurrentDirectory( new File("."));
			
			int result = chooser.showOpenDialog( ImageViewerFrame.this );
			
			if( result == JFileChooser.APPROVE_OPTION )
			{
				String name = chooser.getSelectedFile().getPath();
				label.setIcon( new ImageIcon( name ));
			}
		}
	
	}
	
	private JLabel label;
	private JFileChooser chooser;
	
	public static final int DEFAULT_WIDTH = 300;
	public static final int DEFAULT_HEIGHT = 400;
}

class ExtensionFileFilter extends FileFilter{
	
	public void addExtension( String extension ){
		if( !extension.startsWith("."))
			extension = "." + extension;
		
		extensions.add( extension.toLowerCase() );
	}
	
	public void setDescription( String aDescription ){
		description = aDescription;
	}
	
	public String getDescription(){
		return description;
	}
	
	public boolean accept( File f ){
		
		if ( f.isDirectory() )
			return true;
		
		String name = f.getName().toLowerCase();
		
		for( String extension : extensions )
			if( name.endsWith(extension))
				return true;
		
		return false;
	}
	
	private String description = "";
	private ArrayList<String> extensions = new ArrayList<String>();
	
}

class FileIconView extends FileView{
	
	public FileIconView( FileFilter aFilter, Icon anIcon ){
		filter = aFilter;
		icon = anIcon;
	}
	
	public Icon getIcon( File f ){
		if( !f.isDirectory() && filter.accept(f) )
			return icon;
		else
			return null;
	}
	
	private FileFilter filter;
	private Icon icon;
	
}

class ImagePreviewer extends JLabel {
	
	public ImagePreviewer( JFileChooser chooser ){
		
		setPreferredSize( new Dimension( 100, 100 ) );
		setBorder( BorderFactory.createEtchedBorder() );
	
		chooser.addPropertyChangeListener( new PropertyChangeListener(){
			public void propertyChange( PropertyChangeEvent event ){
				
				if( event.getPropertyName() == JFileChooser.SELECTED_FILE_CHANGED_PROPERTY )
				{
					File f = ( File ) event.getNewValue();
					
					if ( f == null )
					{
						setIcon( null );
						return;
					}
					
					ImageIcon icon = new ImageIcon(f.getPath());
					
					if( icon.getIconWidth() > getWidth() )
						icon = new ImageIcon( icon.getImage().getScaledInstance( getWidth(), -1, Image.SCALE_DEFAULT ) );
					
					setIcon(icon);
				}
			}
		});
	}
}

é um exemplo completo para utilizar JFileChooser.

espero ter ajudado

atenciosamente

J

Muito bom funcionou, como em seguida, criar um botão que tenha o método de pegar a imagem do jPanel e gravar no Banco de Dados?

Valeu galera!

V

Jefries:
Muito bom funcionou, como em seguida, criar um botão que tenha o método de pegar a imagem do jPanel e gravar no Banco de Dados?

Valeu galera!

Oi Jeffries, não ressuscite tópicos. É pouco provável que o pessoal lá de 2006 volte aqui para te ajudar. De qualquer forma, mesmo que volte, é sempre melhor abrir um tópico novo no GUJ, com o título mais adequado à sua dúvida, do que trazer das cinzas um muito velho.

Criado 6 de julho de 2006
Ultima resposta 23 de jul. de 2010
Respostas 3
Participantes 4