Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    Come e dove aggiungere un filtro al JFileChooser?!?

    Devo aggiungere un filtro che prenda solo i file xml come fare?

    E soprattutto come aggiungerlo?!?

    Questo è il mio codice:



    codice:
     
    
    import javax.swing.*; 
    import javax.swing.text.*; 
    import java.awt.*; 
    import java.awt.event.*; 
    import java.io.*;  
    
    public class Tesi extends JFrame { 
      private JTextComponent editor; 
      private JFileChooser fileChooser; 
      protected Action loadAction; 
       
      public Tesi() { 
        super("Tesi"); 
        setSize(300,300); 
        createActions();  
        
        JToolBar toolbar = createToolBar(); 
        editor = createEditor(); 
        JComponent centerPanel = createCenterComponent(); 
        getContentPane().add(BorderLayout.NORTH,toolbar); 
        getContentPane().add(BorderLayout.CENTER,centerPanel); 
        fileChooser = new JFileChooser(); 
        setVisible(true);  
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     } 
      protected void createActions() { 
        loadAction = new AbstractAction("Open") { 
          public void actionPerformed(ActionEvent e) { 
            loadText(); 
          } 
        }; 
         
      } 
      protected JToolBar createToolBar() { 
        JToolBar tb = new JToolBar(); 
        tb.add(loadAction);  
        return tb; 
      } 
     
      protected JComponent createCenterComponent() { 
        if(editor == null) 
          editor = createEditor(); 
        return new JScrollPane(editor); 
      } 
      protected JTextComponent createEditor() { 
        return new JTextArea(); 
      } 
      public void loadText() { 
        int response = fileChooser.showOpenDialog(this); 
        if(response==JFileChooser.APPROVE_OPTION) { 
          try { 
            File f = fileChooser.getSelectedFile(); 
            Reader in = new FileReader(f); 
            editor.read(in,null); 
            setTitle(f.getName()); 
          } 
          catch(Exception e) {} 
        } 
      } 
      
      public static void main(String argv[]) { 
        Tesi t = new Tesi(); 
      } 
    }

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Come e dove aggiungere un filtro al JFileChooser?!?

    Originariamente inviato da xxdavide84xx
    Devo aggiungere un filtro che prenda solo i file xml come fare?
    Se vuoi aggiungere un "choosable file filter", devi usare il metodo di JFileChooser:

    public void addChoosableFileFilter(FileFilter filter)

    FileFilter è una classe astratta, o fornisci una "tua" implementazione oppure, se usi Java 6, puoi usare la classe FileNameExtensionFilter che fornisce già una implementazione.
    Come al solito, consiglio di leggere la documentazione delle classi menzionate.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Io avevo fatto questo codice per il filtro....
    codice:
    class Filtro extends FileFilter { 
    
    protected String description; 
    protected String extension; 
    
    protected Filtro () { 
    description=".xml"; 
    extension=".xml"; 
    } 
    
    public String getDescription() { 
    return description; 
    } 
    
    public boolean accept(File f) { 
    
    if(f.isDirectory()) return true; 
    String path=f.getAbsolutePath(); 
    for(int i=0; i<extension.length(); i++) { 
    if(path.endsWith(extension) && (path.charAt(path.length()-extension.length())=='.')) 
    return true; 
    } 
    return false; 
    } 
    }
    o in alternativa mi avevano suggerito questo degli amici....

    codice:
    package dks.src.FileFilters;
    
    import java.io.File;
    import javax.swing.filechooser.*;
    
    public class XMLFileFilter extends FileFilter {
    
    	public XMLFileFilter() {
    		super();
    	}
    
        public boolean accept(File f) {
            if (f.isDirectory()) {
                return true;
            }
            String extension = f.getName();
            int i = extension.lastIndexOf('.');
    
            if (i > 0 &&  i < extension.length() - 1) {
            	extension = extension.substring(i+1).toLowerCase();
            }
            
            if (extension != null) {
                if (extension.equals("xml")) {
                	return true;
                } 
                else {
                    return false;
                }
            }
            else {
                return false;
            }
        }
    
        public String getDescription() {
            return "Fichier xml";
        }
    
    }
    Io non so se sia meglio il mio o questo sotto...e come inserirlo correttamente nel mio codice...(in senso va prima o dopo il mio codice...e come mi comporto con gli import?!?)

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Domanda... non era più sbrigativo questo?
    codice:
    class Filtro extends FileFilter { 
    
       public String getDescription() { 
          return "File XML (*.xml)"; 
       } 
    
       public boolean accept(File f) { 
          return f.getName().toUpperCase().endsWith(".XML");
       }
    }
    Ad ogni modo come import ti basta il package javax.swing.filechooser.*

    E per utilizzarlo usi:
    codice:
    JFileChooser jfc = new JFileChooser();
    jfc.setFileFilter( new Filtro() );
    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    Aggiungendo il tuo codice come vedi sotto (in rosso )

    codice:
    import javax.swing.*; 
    import javax.swing.text.*; 
    import java.awt.*; 
    import java.awt.event.*; 
    import java.io.*;  
    
    public class Tesi extends JFrame { 
      private JTextComponent editor; 
      private JFileChooser fileChooser; 
      protected Action loadAction; 
       
      public Tesi() { 
        super("Tesi"); 
        setSize(300,300); 
        createActions();  
        
        JToolBar toolbar = createToolBar(); 
        editor = createEditor(); 
        JComponent centerPanel = createCenterComponent(); 
        getContentPane().add(BorderLayout.NORTH,toolbar); 
        getContentPane().add(BorderLayout.CENTER,centerPanel); 
        JFileChooser jfc = new JFileChooser();
        jfc.setFileFilter( new Filtro() ); 
        setVisible(true);  
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     } 
      protected void createActions() { 
        loadAction = new AbstractAction("Open") { 
          public void actionPerformed(ActionEvent e) { 
            loadText(); 
          } 
        }; 
         
      } 
      protected JToolBar createToolBar() { 
        JToolBar tb = new JToolBar(); 
        tb.add(loadAction);  
        return tb; 
      } 
     
      protected JComponent createCenterComponent() { 
        if(editor == null) 
          editor = createEditor(); 
        return new JScrollPane(editor); 
      } 
      protected JTextComponent createEditor() { 
        return new JTextArea(); 
      } 
      public void loadText() { 
        int response = fileChooser.showOpenDialog(this); 
        if(response==JFileChooser.APPROVE_OPTION) { 
          try { 
            File f = fileChooser.getSelectedFile(); 
            Reader in = new FileReader(f); 
            editor.read(in,null); 
            setTitle(f.getName()); 
          } 
          catch(Exception e) {} 
        } 
      } 
      
      public static void main(String argv[]) { 
        Tesi t = new Tesi(); 
      } 
    } 
    
    class Filtro extends FileFilter { 
    
       public String getDescription() { 
          return "File XML (*.xml)"; 
       } 
    
       public boolean accept(File f) { 
          return f.getName().toUpperCase().endsWith(".XML");
       }
    }
    Mi da questi ERRORI:
    C:\Documents and Settings\venturi davide\Desktop\Tesi.java:67: no interface expected here
    class Filtro extends FileFilter {
    ^
    C:\Documents and Settings\venturi davide\Desktop\Tesi.java:23: setFileFilter(javax.swing.filechooser.FileFilter) in javax.swing.JFileChooser cannot be applied to (Filtro)
    jfc.setFileFilter( new Filtro() );
    ^
    2 errors
    Compilation interrupted

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da xxdavide84xx
    Mi da questi ERRORI:
    C:\Documents and Settings\venturi davide\Desktop\Tesi.java:67: no interface expected here
    class Filtro extends FileFilter {
    ^
    C:\Documents and Settings\venturi davide\Desktop\Tesi.java:23: setFileFilter(javax.swing.filechooser.FileFilter) in javax.swing.JFileChooser cannot be applied to (Filtro)
    jfc.setFileFilter( new Filtro() );
    ^
    2 errors
    Compilation interrupted
    FileFilter è anche una interfaccia in java.io. Quindi metti javax.swing.filechooser.FileFilter quando vuoi riferirti al FileFilter per JFileChooser.

    Occhio inoltre che nel costruttore di Tesi hai dichiarato una variabile locale jfc che non serve.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Originariamente inviato da andbin
    FileFilter è anche una interfaccia in java.io. Quindi metti javax.swing.filechooser.FileFilter quando vuoi riferirti al FileFilter per JFileChooser.

    Occhio inoltre che nel costruttore di Tesi hai dichiarato una variabile locale jfc che non serve.
    cambiando le 2 righe e mettendo queste:

    fileChooser = new JFileChooser();
    javax.swing.fileChooser.FileFilter;

    mi da quest'ERRORE....

    C:\Documents and Settings\venturi davide\Desktop\Tesi.java:23: not a statement
    javax.swing.fileChooser.FileFilter;
    ^
    1 error

    possibile che nessuno riesca ad integrarmi i miei codici?
    Se potete aiutarmi...

  8. #8
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Originariamente inviato da xxdavide84xx
    possibile che nessuno riesca ad integrarmi i miei codici?
    Possibile che tu non ti renda conto delle lacune che hai? Che senso avrebbe l'istruzione (che tale non è!!) che hai scritto?

    andbin ti ha solo detto che se vuoi riferirti all'interfaccia FileFilter del package javax.swing.filechooser devi specificare il riferimento completo al package, questo significa che al posto di scrivere solo FileFilter dovrai scrivere javax.swing.filechooser.FileFilter: è sufficiente un "Modifica\Sostituisci" di un qualsiasi editor di testo.

    Ti posto il codice corretto, ma ti invito caldamente ad aprire un libro di Java:
    codice:
    import javax.swing.filechooser.*;
    
    
    ...
    
    
    class Filtro extends javax.swing.filechooser.FileFilter { 
    
       public String getDescription() { 
          return "File XML (*.xml)"; 
       } 
    
       public boolean accept(File f) { 
          return f.getName().toUpperCase().endsWith(".XML");
       }
    }
    Era tanto difficile?


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  9. #9
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    63
    Ciao a tutti,
    sono anche io alle prese con la necessità di filtrare i files selezionabili con il filechooser.

    Ho utilizzato il codice di LeleFT che di fatto consente di selezionare solo i files desiderati, ma c'è un problemino: non compaiono le cartelle presenti sul pc, quindi non è possibile ricercare i files!
    Perdonate l'ignoranza ma non saprei come risolvere questo problema...

    Inoltre quando si apre il filechooser nel campo "tipo di file" compare "File XML (*.xml)" come da codice e "Tutti i files". Volendo eliminare la possibilità di scegliere tutti i tipi di files, come si può fare?

    Grazie in anticipo a tutti.

  10. #10
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da filo84
    ma c'è un problemino: non compaiono le cartelle presenti sul pc, quindi non è possibile ricercare i files!
    Il metodo accept del filtro deve ritornare true se la entry è una directory. Quindi: se è una directory OR ha la/e estensione/i richiesta/e.

    Originariamente inviato da filo84
    Volendo eliminare la possibilità di scegliere tutti i tipi di files, come si può fare?
    Il filtro "all files" viene aggiunto per default. Viene anche restituito dal metodo getAcceptAllFileFilter(). Quindi basta passare questo filtro al metodo removeChoosableFileFilter().
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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.