Customizing a JFileChooser
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.util.HashMap;
import javax.swing.Icon;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.filechooser.FileFilter;
import javax.swing.filechooser.FileView;
public class EnhancedFileTester extends JPanel {
class AnOvalIcon implements Icon {
Color color;
public AnOvalIcon(Color c) {
color = c;
}
public void paintIcon(Component c, Graphics g, int x, int y) {
g.setColor(color);
g.fillOval(x, y, getIconWidth(), getIconHeight());
}
public int getIconWidth() {
return 10;
}
public int getIconHeight() {
return 15;
}
}
public class IconView extends FileView {
private HashMap hash = new HashMap();
public IconView() {
hash.put("htm", new AnOvalIcon(Color.RED));
hash.put("html", new AnOvalIcon(Color.GREEN));
hash.put("java", new AnOvalIcon(Color.BLUE));
}
public String getName(File f) {
String s = f.getName();
if (s.length() == 0) {
s = f.getAbsolutePath();
}
return s;
}
public String getDescription(File f) {
return f.getName();
}
public String getTypeDescription(File f) {
return f.getAbsolutePath();
}
public Icon getIcon(File f) {
String path = f.getAbsolutePath();
int pos = path.lastIndexOf('.');
if ((pos >= 0) && (pos < (path.length() - 1))) {
String ext = path.substring(pos + 1).toLowerCase();
return (Icon) hash.get(ext);
}
return null;
}
public Boolean isTraversable(File file) {
return (new Boolean(file.isDirectory()));
}
}
public class ExtensionFilter extends FileFilter {
private String extensions[];
private String description;
public ExtensionFilter(String description, String extension) {
this(description, new String[] { extension });
}
public ExtensionFilter(String description, String extensions[]) {
this.description = description;
this.extensions = (String[]) extensions.clone();
}
public boolean accept(File file) {
if (file.isDirectory()) {
return true;
}
int count = extensions.length;
String path = file.getAbsolutePath();
for (int i = 0; i < count; i++) {
String ext = extensions[i];
if (path.endsWith(ext)
&& (path.charAt(path.length() - ext.length()) == '.')) {
return true;
}
}
return false;
}
public String getDescription() {
return (description == null ? extensions[0] : description);
}
}
public EnhancedFileTester() {
JButton jb = new JButton("Open File Viewer");
add(jb);
ActionListener listener = new ActionListener() {
public void actionPerformed(ActionEvent e) {
JFileChooser chooser = new JFileChooser(".");
FileFilter type1 = new ExtensionFilter("Java source", ".java");
FileFilter type2 = new ExtensionFilter("Image files",
new String[] { ".jpg", ".gif", "jpeg", "xbm" });
FileFilter type3 = new ExtensionFilter("HTML files",
new String[] { ".htm", ".html" });
chooser.addChoosableFileFilter(type1);
chooser.addChoosableFileFilter(type2);
chooser.addChoosableFileFilter(type3);
chooser.setFileFilter(type2); // Initial filter setting
FileView view = new IconView();
chooser.setFileView(view);
int status = chooser.showOpenDialog(EnhancedFileTester.this);
if (status == JFileChooser.APPROVE_OPTION) {
File f = chooser.getSelectedFile();
System.out.println(f);
}
}
};
jb.addActionListener(listener);
}
public static void main(String args[]) {
JFrame f = new JFrame("Enhanced File Example");
JPanel j = new EnhancedFileTester();
f.getContentPane().add(j, BorderLayout.CENTER);
f.setSize(300, 200);
f.show();
}
}
Related examples in the same category