Blame view

JPAINT/jpaint/ExampleFileFilter.java~ 5.1 KB
933d00ad   rlentieu   add JPaint
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
  import java.io.File;
  import java.util.Hashtable;
  import java.util.Enumeration;
  import javax.swing.*;
  import javax.swing.filechooser.*;
  
  public class ExampleFileFilter extends FileFilter {
     
      private Hashtable filters = null;
      private String description = null;
      private String fullDescription = null;
      private boolean useExtensionsInDescription = true;
  
      /**
       * Creates a file filter. If no filters are added, then all
       * files are accepted.
       *
       */
      public ExampleFileFilter() {
  	this.filters = new Hashtable();
      }
  
      /**
       * Creates a file filter that accepts files with the given extension.
       * Example: new ExampleFileFilter("jpg");
       *
       */
      public ExampleFileFilter(String extension) {
  	this(extension,null);
      }
  
      /**
       * Creates a file filter that accepts the given file type.
       * Example: new ExampleFileFilter("jpg", "JPEG Image Images");
       *
       * Note that the "." before the extension is not needed. If
       * provided, it will be ignored.
       *
       */
      public ExampleFileFilter(String extension, String description) {
  	this();
  	if(extension!=null) addExtension(extension);
   	if(description!=null) setDescription(description);
      }
  
      /**
       * Creates a file filter from the given string array.
       * Example: new ExampleFileFilter(String {"gif", "jpg"});
       *
       * Note that the "." before the extension is not needed adn
       * will be ignored.
       *
       */
      public ExampleFileFilter(String[] filters) {
  	this(filters, null);
      }
  
      /**
       * Creates a file filter from the given string array and description.
       * Example: new ExampleFileFilter(String {"gif", "jpg"}, "Gif and JPG Images");
       *
       * Note that the "." before the extension is not needed and will be ignored.
       *
       */
      public ExampleFileFilter(String[] filters, String description) {
  	this();
  	for (int i = 0; i < filters.length; i++) {
  	    // add filters one by one
  	    addExtension(filters[i]);
  	}
   	if(description!=null) setDescription(description);
      }
  
      /**
       * Return true if this file should be shown in the directory pane,
       * false if it shouldn't.
       *
       * Files that begin with "." are ignored.
       *
       */
      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;
      }
  
      /**
       * Return the extension portion of the file's name .
       *
       */
       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;
      }
  
      /**
       * Adds a filetype "dot" extension to filter against.
       *
       * For example: the following code will create a filter that filters
       * out all files except those that end in ".jpg" and ".tif":
       *
       *   ExampleFileFilter filter = new ExampleFileFilter();
       *   filter.addExtension("jpg");
       *   filter.addExtension("tif");
       *
       * Note that the "." before the extension is not needed and will be ignored.
       */
      public void addExtension(String extension) {
  	if(filters == null) {
  	    filters = new Hashtable(5);
  	}
  	filters.put(extension.toLowerCase(), this);
  	fullDescription = null;
      }
  
  
      /**
       * Returns the human readable description of this filter. For
       * example: "JPEG and GIF Image Files (*.jpg, *.gif)"
       *
       */
      public String getDescription() {
  	if(fullDescription == null) {
  	    if(description == null || isExtensionListInDescription()) {
   		fullDescription = description==null ? "(" : description + " (";
  		// build the description from the extension list
  		Enumeration extensions = filters.keys();
  		if(extensions != null) {
  		    fullDescription += "." + (String) extensions.nextElement();
  		    while (extensions.hasMoreElements()) {
  			fullDescription += ", ." + (String) extensions.nextElement();
  		    }
  		}
  		fullDescription += ")";
  	    } else {
  		fullDescription = description;
  	    }
  	}
  	return fullDescription;
      }
  
      /**
       * Sets the human readable description of this filter. For
       * example: filter.setDescription("Gif and JPG Images");
       *
       */
      public void setDescription(String description) {
  	this.description = description;
  	fullDescription = null;
      }
  
      /**
       * Determines whether the extension list (.jpg, .gif, etc) should
       * show up in the human readable description.
       *
       * Only relevent if a description was provided in the constructor
       * or using setDescription();
       *
       */
      public void setExtensionListInDescription(boolean b) {
  	useExtensionsInDescription = b;
  	fullDescription = null;
      }
  
      /**
       * Returns whether the extension list (.jpg, .gif, etc) should
       * show up in the human readable description.
       *
       * Only relevent if a description was provided in the constructor
       * or using setDescription();
       *
       */
      public boolean isExtensionListInDescription() {
  	return useExtensionsInDescription;
      }
  }