Visualizzazione dei risultati da 1 a 3 su 3

Discussione: problema jfileChooser

  1. #1
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    39

    problema jfileChooser

    Salve ragazzi ho creato una frame che utilizza un jfileChooser. Non riesco a fare in modo che mi salvi solo i file. dat. Se in salva in nome file scrivo un file e un estensione diversa da dat ad esempio txt me la salva , non riesco a capire come fare in modo che non mi salvi altre estensioni se non quella specificata , potete spiegarmi perchè?

    codice:
    public class Esempio10
        extends JFrame {
    
    
      JOptionPane msg=new JOptionPane();
      JFileChooser fileChooser=new JFileChooser();
      JTextArea textArea=new JTextArea(20,60);
    
    
      public Esempio10() {
        super("Esempio JTextArea, Menu, JOptionPane e JFileChooser"); //crea una JFrame con titolo
    
    
        JMenuBar menuBar=new JMenuBar();
    
    
        JMenu fileMenu=new JMenu("File");
    
    
        JMenuItem apri=new JMenuItem("Apri");
        fileChooser.setAcceptAllFileFilterUsed(false);
        fileChooser.addChoosableFileFilter (new FileNameExtensionFilter ("File dat", "dat"));
        //fileChooser.addChoosableFileFilter (new ExtensionFileFilter ("dat", "Tutti i file con estensione .dat"));
        apri.addActionListener(new ActionListener() {
          public void actionPerformed(ActionEvent e) {
             
            if (fileChooser.showOpenDialog(null)==JFileChooser.APPROVE_OPTION) {
              try {
                FileReader f = new FileReader(fileChooser.getSelectedFile());
                boolean fine=false;
                while(!fine) {
                  try{
                    int c=f.read();
                    if (c==-1) fine=true;
                    else textArea.append((char)c+"");
                  }
                  catch (IOException ioex) {
                  }
                }
              }
              catch (FileNotFoundException fnf) {}
            }
          }
        });
    
    
        JMenuItem salva=new JMenuItem("Salva");
        salva.addActionListener(new ActionListener() {
          public void actionPerformed(ActionEvent e) {
            if (fileChooser.showSaveDialog(null)==JFileChooser.APPROVE_OPTION) {
              try {
                FileWriter f = new FileWriter(fileChooser.getSelectedFile());
                String s=textArea.getText();
                f.write(s);
                f.flush();
                f.close();
              }
              catch (IOException ioe) {}
            }
          }
        });
    
    
        JMenuItem chiudi=new JMenuItem("Chiudi");
        chiudi.addActionListener(new ActionListener() {
          public void actionPerformed(ActionEvent e) {
            if (msg.showConfirmDialog(null,"Sei sicuro di voler uscire?", "Conferma",
                                 JOptionPane.YES_NO_OPTION)==JOptionPane.YES_OPTION)
             System.exit(0);
          }
        });
    
    
    
    
        fileMenu.add(apri);
        fileMenu.add(salva);
        fileMenu.addSeparator();
        fileMenu.add(chiudi);
    
    
        menuBar.add(fileMenu);
    
    
        JMenu aboutMenu=new JMenu("Informazioni");
    
    
        aboutMenu.addMouseListener(new MouseAdapter() {
          public void mouseClicked(MouseEvent e) {
            JOptionPane msg= new JOptionPane();
            msg.showMessageDialog(null, "Prova JTextArea, JMenu, JOptionPane e JFileChooser", "Informazioni", JOptionPane.INFORMATION_MESSAGE);
          }
        });
    
    
        menuBar.add(aboutMenu);
    
    
        this.setJMenuBar(menuBar);
    
    
        setLocation(200, 100); //imposta la posizione del vertice in alto a sinistra
        addWindowListener(new ExitListener()); //aggiunge un listener per la chiusura
    
    
        Container container=getContentPane();
        container.setLayout(new GridLayout(1,1));
    
    
        textArea.setLineWrap(true);
        textArea.setWrapStyleWord(true);
        container.add(textArea);
    
    
        container.add(new JScrollPane(textArea));
    
    
        pack(); //"impacchetta" il frame, cioè fa in modo che assuma dimensione tale
        //da contenere esattamente ciò che è contenuto nella finestra
    
    
        setVisible(true);//mostra la finestra. Equivale a setVisible(true);
      }
    
    
      public static void main(String[] args) {
    /*    try {
          UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
        }
        catch(Exception e) {}*/
        Esempio10 es10= new Esempio10();
      }
    }

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da breathex Visualizza il messaggio
    Non riesco a fare in modo che mi salvi solo i file. dat. Se in salva in nome file scrivo un file e un estensione diversa da dat ad esempio txt me la salva , non riesco a capire come fare in modo che non mi salvi altre estensioni se non quella specificata , potete spiegarmi perchè?
    I "choosable file filter" di JFileChooser vengono usati da JFileChooser SOLO come filtro "visuale" nella sua lista dei file. Non vengono usati per fare alcun controllo, imposizione o limitazione su ciò che poi l'utente seleziona davvero.

    Se vuoi puoi fare un controllo dopo che l'utente ha approvato la selezione. Se hai un solo tipo di file fisso puoi fare es.:

    codice:
    File selectedFile = fileChooser.getSelectedFile();
    
    if (selectedFile.getName().endsWith(".dat")) { ..... }

    Oppure in modo più pulito (e specialmente se avessi N filtri selezionabili) prendi il FileFilter selezionato e invochi tu il accept() per vedere se il filtro accetta davvero quel file.

    codice:
    File selectedFile = fileChooser.getSelectedFile();
    FileFilter selectedFilter = fileChooser.getFileFilter();
    
    if (selectedFilter.accept(selectedFile)) { ...... }

    Il problema/difetto di approcci del genere è che questo controllo lo fai dopo che l'utente ha approvato la selezione e quindi solo DOPO che la finestra del file chooser si è chiusa!
    Invece sarebbe bello mantenere aperta la finestra del chooser e mostrare per es. una dialog di errore. Questo si può fare ma devi estendere JFileChooser per ridefinire il metodo approveSelection(). Trovi il mio (molto vecchio!) esempio qui.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    39
    Grazie mille , chiarissimo

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.