JAVA Swing: un JFileChooser per soli formati immagine

Ciascuna applicazione ha la necessità di consentire all’utente di aprire solo i formati di files che è in grado di gestire. Per cui quando l’utente clicca su “Apri” gli si deve aprire un file chooser con gli opportuni filtri sulle estensioni dei files già settati. In questo caso creiamo un JFileChooser che permette soltanto la selezione di file immagine. Per farlo dobbiamo fare due cose:

  • Disabilitare la voce di default “tutti i files”
  • Impostare il filtro per i formati immagine

Per la prima operazione utilizziamo il metodo setAcceptAllFileFilterUsed passandogli il valore false come parametro.
Per la seconda dobbiamo creare un oggetto della classe FileNameExtensionFilter che offre il seguente costruttore:

FileNameExtensionFilter(String description, String... extensions)

Dobbiamo quindi fornire il nome da assegnare al nostro filtro, ad esempio “Image files” ed una lista di stringhe che costituiscono le diverse estensioni ammesse dal filtro stesso. Per ottenere la lista delle estensioni dei formati immagini utilizziamo il metodo statico getReaderFileSuffixes() della classe ImageIO, definito così:

public static String[] getReaderFileSuffixes()

Quindi creiamo la nostra classe che estende JFileChooser nel modo seguente:

import javax.imageio.ImageIO;
import javax.swing.JFileChooser;
import javax.swing.filechooser.FileNameExtensionFilter;

public class OnlyImagesFileChooser extends JFileChooser{

    public OnlyImagesFileChooser() {
        this.setAcceptAllFileFilterUsed(false);
        this.setFileFilter(new FileNameExtensionFilter("Image files", ImageIO.getReaderFileSuffixes()));
    }

}

Proviamo a collegare il nostro nuovo JFileChooser alla pressione di un pulsante tramite un semplice listener e vediamo il risultato:

JButton fcButton = new JButton("Browse");
fcButton.addActionListener(new ActionListener() {

	@Override
	public void actionPerformed(ActionEvent e) {
		OnlyImagesFileChooser oifc = new OnlyImagesFileChooser();	
		oifc.showOpenDialog(null);
	}
	
});

JFileChooser only images

Nel caso in cui non avessimo disabilitato il filtro di default “Tutti i files” tramite il metodo setAcceptAllFileFilterUsed(false); non avremmo limitato la scelta ai soli formati immagine:

JFileChooser All Files enabled

Leave a Reply

Your email address will not be published. Required fields are marked *