Home / Programmazione / Java / Esportare una JList in Java
Mattepuffo

Esportare una JList in Java

Esportare una JList in Java

JList è un componente SWING che rappresenta una serie di oggetti sotto forma di lista.

Qui avevo spiegato come caricare una JLlist da una file XML per esempio.

Oggi vediamo come esportarli in formato TXT.

Inoltre integreremo utto con il solit JFileChooser per decidere dove salvare il file.

Prima di tutto nel vostro JFrame preparate l'evento che poi richiamerà il JFC (ad esempio un menu o un bottone).

Poi preparate il JFC; tipo questo:

import java.io.File;
import java.io.IOException;
import javax.swing.JFileChooser;
import javax.swing.filechooser.FileFilter;

public class FileChooserTxt {

    private static File f = null;

    public static String salva() throws IOException {
        JFileChooser fc = new JFileChooser();
        fc.setDialogTitle("Save TXT");
        fc.setApproveButtonText("Save");
        fc.setApproveButtonToolTipText("Approve file");

        FileFilter txtFilter = new GenericFileFilter("File *.txt", "txt");
        fc.setFileFilter(txtFilter);

        int returnVal = fc.showSaveDialog(fc);
        if (returnVal == JFileChooser.APPROVE_OPTION) {
            f = fc.getSelectedFile();
            FileFilter selectedFilter = fc.getFileFilter();
            if (f.getName().indexOf('.') == -1) {
                f = new File(f.getPath() + ".txt");
            }
        }
        return f.toString();
    }
}

Qui ho messo un solo filtro perchè l'esportazione la faccio solo in TXT.

Adesso passiamo alla classe che si occuperà dell'esportazione:

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import javax.swing.ListModel;

public class ExportList {

    public static void exportList(ListModel model, File f) throws FileNotFoundException {
        try (PrintWriter pw = new PrintWriter(new OutputStreamWriter(new FileOutputStream(f)))) {
            for (int i = 0; i < model.getSize(); i++) {
                pw.println(model.getElementAt(i).toString());
            }
        }
    }
}

Un solo metodo statico che richiede due parametri: un ListModel (che rappresenta il model della JList) e un oggetto File.

In pratica non facciamo altro che scorrere il model alla ricerca dei vari items della lista, e un per uno li mettiamo nell'oggetto PrintWriter che poi si occuperà di salvare il file.

L'oggetto File ci arriva direttamente dal JFC.

Nel mio JFrame infatti avrò una cosa del genere:

   try {
            ExportList.exportList(model, new File(FileChooserTxt.salva()));
        } catch (IOException ex) {
            JOptionPane.showMessageDialog(null, ex.getMessage());
        }

In pratica al metodo exportList passiamo il file impostato dal JFC.

Ciao!