17. januar 2005 - 19:42Der er
10 kommentarer og 1 løsning
vælg filtype ved gem og åben
Hej ... Hvordan restricter man valg af filtype under JfileChooser når man skal gemme / åbne en fil ? Altså ikke blabla.endsWith("aaa") men selve menuen nedenunder hvor man vælger hvilken extension filen man er i gang med at hente/åbne skal have
protected ProjFileFilter(String extension, String description) { this(); if (extension != null) addExtension(extension); if (description != null) setDescription(description); }
/** * Metode brugt til at definere om filen skal vises i JFileChooseren * Defineret i den Abstrakte klasse FileFilter og derfor et krav til klassen * * @return true hvis extension eksistere i filteret ellers false */ public boolean accept(File f) { if (f != null) { if (f.isDirectory()) { return true; } String extension = getExtension(f); if (extension != null && filters.get(getExtension(f)) != null) { return true; } } return false; }
/** * Retunere Extension på den givne fil * * @return Fil extension */ public String getExtension(File f) { if (f != null) { String filename = f.getName(); int i = filename.lastIndexOf('.'); if (i > 0 && i < filename.length() - 1) { return filename.substring(i + 1).toLowerCase(); } } return null; } /** * Tilføjer en extension til Hashtabellen indeholdende alle extensions * */ public void addExtension(String extension) { if (filters == null) { filters = new Hashtable(); } filters.put(extension.toLowerCase(), this); fullDescription = null; }
/** * udformer et læsbart output brugt i JFileChooseren, * metoden er defineret i den abstrakte klasse FileFilter, * og derfor et krav til klassen */ public String getDescription() { if (fullDescription == null) { if (description == null || isExtensionListInDescription()) { fullDescription = description == null ? "(" : description + " ("; Enumeration extensions = filters.keys(); if (extensions != null) { fullDescription += "." + (String) extensions.nextElement(); while (extensions.hasMoreElements()) { fullDescription += ", ." + (String) extensions.nextElement(); } } fullDescription += ")"; } else { fullDescription = description; } } return fullDescription; }
er det virkeligt nødvendigt med alt det bare for fx. kun at have .txt i det der rulle-panel under det sted hvor man skriver filnavn? der skal bare stå ".txt" i stedet for "alle filer"
De behøver måske ikke bruge både "extends FileFiler" og "implements FilenameFilter", men jeg bruger dette filter på flere forskellige steder, så jeg behøver det :)
-------------------------------------- public class EasyFileNameFilter extends FileFilter implements FilenameFilter {
public boolean accept(File dir, String name) { return name.endsWith(".txt"); }
den kode du præsentere der er i mine øjne meget ufuldkommen og fjerner en del af fordelene ved Object Orienteret programmering, med den løsning er du nød til at lave en ny klasse hver eneste gang du vil have en ny filtype, min kode er skrevet til generelt brug, den kan instansieres til enhver filtype og kan også indeholde flere filtyper i et filter....
mht. din tvivl omkring FileFilter og FilenameFilter.
FileFilter er en abstrakt klasse som implementere interfacet FilenameFilter, da du arver fra FileFilter har du allerede sikret at du overholder den adfærd som interfacet FilenameFilter tilbyder, så konklusion: FilenameFilter er overflødig
Ok, du har ret det. Selv bruger jeg en klasse der tar fil-endelsen som input til konstruktorn. Men før at gøre klassen så nem som muligt før phineas som kun vil ha text-filer så gjorde jeg den mindre.
Med hensyn til FilenameFilter. FileFilter implementerer ikke FilenameFilter, så hvis jeg fjerner "implements FilenameFilter" så virker ikke: ------------------- File f = new File(directory); String[] names = f.list(new EasyFileNameFilter(fileEnding)); ------------------- Den siger "The method list() is not applicable...... yaddayadda"
hmm ja du har ret mht. filenamefilter, men må jeg spørge hvor det kommer ind i billedet i forhold til ovenstående spørgsmål, JFileChooseren sørger selv for at liste de filer den skal bruge udfra det filter du laver (som netop extender FileFilter) ?
:) Jeg mente at jeg bruger både FileFilter og FilenameFilter i min kode. Og då jeg ikke kunde huske hvilken af dem jeg brugte til JFileChooser så læt jeg bægge to vara kvar.
undskyld ventetiden, havde fået løst det i mellemtiden, men det var med metoden som di8leva paster i sit indlæg lidt højere oppe, så pointene tilfalder ham.
tak for opmærksomheden
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.