-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathMyFileFilter.java
275 lines (238 loc) · 7.68 KB
/
MyFileFilter.java
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
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
import javax.swing.*;
import java.awt.*;
import java.io.File;
import java.util.*;
import javax.swing.filechooser.*;
import java.beans.*;
class MyFileFilter extends FileFilter {
private static String TYPE_UNKNOWN = "Type Unknown";
private static String HIDDEN_FILE = "Hidden File";
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 MyFileFilter() {
this.filters = new Hashtable();
}
// Creates a file filter that accepts files with the given extension.
public MyFileFilter(String extension) {
this(extension,null);
}
// Creates a file filter that accepts the given file type.
//Example: new ExampleFileFilter("jpg", "JPEG Image Images");
public MyFileFilter(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"});
public MyFileFilter(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");
public MyFileFilter(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.
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");
*/
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
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.
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.
public boolean isExtensionListInDescription() {
return useExtensionsInDescription;
}
}
class FilePreviewer extends JComponent implements PropertyChangeListener
{
ImageIcon thumbnail = null;
public FilePreviewer(JFileChooser fc)
{
setPreferredSize(new Dimension(100, 50));
fc.addPropertyChangeListener(this);
}
public void loadImage(File f)
{
if (f == null)
{
thumbnail = null;
}
else
{
ImageIcon tmpIcon = new ImageIcon(f.getPath());
if(tmpIcon.getIconWidth() > 90)
{
thumbnail = new ImageIcon(
tmpIcon.getImage().getScaledInstance(90, -1, Image.SCALE_DEFAULT));
}
else
{
thumbnail = tmpIcon;
}
}
}
public void propertyChange(PropertyChangeEvent e)
{
String prop = e.getPropertyName();
if(prop.equals(JFileChooser.SELECTED_FILE_CHANGED_PROPERTY))
{
if(isShowing())
{
loadImage((File) e.getNewValue());
repaint();
}
}
}
public void paint(Graphics g)
{
if(thumbnail!=null)
{
int xpos= (getWidth()- thumbnail.getIconWidth())/2;
int ypos= (getHeight()- thumbnail.getIconHeight())/2;
g.drawImage(thumbnail.getImage(), xpos, ypos, null);
}
}
}
class MyFileView extends FileView {
private Hashtable icons = new Hashtable(5);
private Hashtable fileDescriptions = new Hashtable(5);
private Hashtable typeDescriptions = new Hashtable(5);
// The name of the file. Do nothing special here. Let
// the system file view handle this.
public String getName(File f) {
return null;
}
// Adds a human readable description of the file.
public void putDescription(File f, String fileDescription) {
fileDescriptions.put(fileDescription, f);
}
// A human readable description of the file.
public String getDescription(File f) {
return (String) fileDescriptions.get(f);
};
// Adds a human readable type description for files. Based on "dot"
// extension strings, e.g: ".gif". Case is ignored.
public void putTypeDescription(String extension, String typeDescription) {
typeDescriptions.put(typeDescription, extension);
}
// Adds a human readable type description for files of the type of
// the passed in file. Based on "dot" extension strings, e.g: ".gif" Case is ignored.
public void putTypeDescription(File f, String typeDescription) {
putTypeDescription(getExtension(f), typeDescription);
}
// A human readable description of the type of the file.
public String getTypeDescription(File f) {
return (String) typeDescriptions.get(getExtension(f));
}
// Conveinience method that returnsa the "dot" extension for the given file.
public String getExtension(File f) {
String name = f.getName();
if(name != null) {
int extensionIndex = name.lastIndexOf('.');
if(extensionIndex < 0) {
return null;
}
return name.substring(extensionIndex+1).toLowerCase();
}
return null;
}
// Adds an icon based on the file type "dot" extension string, e.g: ".gif". Case is ignored.
public void putIcon(String extension, Icon icon) {
icons.put(extension, icon);
}
// Icon that reperesents this file. Default implementation returns null
public Icon getIcon(File f) {
Icon icon = null;
String extension = getExtension(f);
if(extension != null) {
icon = (Icon) icons.get(extension);
}
return icon;
}
// Whether the file is hidden or not. This implementation returns
// true if the filename starts with a "."
public Boolean isHidden(File f) {
String name = f.getName();
if(name != null && !name.equals("") && name.charAt(0) == '.') {
return Boolean.TRUE;
} else {
return Boolean.FALSE;
}
};
}