package corejavaI.layout;
import java.awt.Dimension;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.io.File;
import java.util.ArrayList;
import javax.swing.BorderFactory;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.filechooser.FileFilter;
import javax.swing.filechooser.FileNameExtensionFilter;
import javax.swing.filechooser.FileView;
public class FileChooserTest {
public static void main(String[] args) {
ImageViewerFrame frame = new ImageViewerFrame();
frame.setTitle("java文件选择");
frame.setLocation(300, 200);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(500, 400);
frame.setVisible(true);
}
}
class ImageViewerFrame extends JFrame{
private static final int DEFAULT_WIDTH = 300;
private static final int DEFAULT_HEIGHT = 400;
private JLabel label;
private JFileChooser chooser;
public ImageViewerFrame(){
setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
JMenuBar menuBar = new JMenuBar();
setJMenuBar(menuBar);
JMenu menu = new JMenu("File");
menuBar.add(menu);
JMenuItem openItem = new JMenuItem("Open");
menu.add(openItem);
openItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
chooser.setCurrentDirectory(new File("."));
// System.out.println("start");
int result = chooser.showOpenDialog(ImageViewerFrame.this);
// System.out.println("end");
// System.out.println(result);
if(result == JFileChooser.APPROVE_OPTION){
String name = chooser.getSelectedFile().getPath();
// System.out.println(name);
label.setIcon(new ImageIcon(name));
pack();
}
}
});
JMenuItem exitItem = new JMenuItem("Exit");
menu.add(exitItem);
exitItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
System.exit(0);
}
});
label = new JLabel();
add(label);
chooser = new JFileChooser();
final ExtensionFileFilter filter = new ExtensionFileFilter();
filter.addExtension("jpg");
filter.addExtension("jpeg");
filter.addExtension("gif");
filter.setDescription("Image files");
FileNameExtensionFilter filter2 = new FileNameExtensionFilter("Image files", "jpg", "jpeg", "gif");
chooser.setFileFilter(filter);
chooser.setAccessory(new ImagePreviewer(chooser));
chooser.setFileView(new FileIconView(filter2, new ImageIcon("palette.gif")));
}
}
class ExtensionFileFilter extends FileFilter{
private String description = "";
private ArrayList<String> extensions = new ArrayList<String>();
public void addExtension(String extension){
if(!extension.startsWith("."))
extension = "." + extension;
extensions.add(extension.toLowerCase());
}
@Override
public boolean accept(File f) {
if(f.isDirectory())
return true;
String name = f.getName().toLowerCase();
for(String extension : extensions)
if(name.endsWith(extension))
return true;
return false;
}
public void setDescription(String aDescription){
description = aDescription;
}
@Override
public String getDescription() {
// TODO Auto-generated method stub
return description;
}
}
class ImagePreviewer extends JLabel{
public ImagePreviewer(JFileChooser chooser){
setPreferredSize(new Dimension(100, 100));
setBorder(BorderFactory.createEtchedBorder()); //etched:浮雕化
chooser.addPropertyChangeListener(new PropertyChangeListener() {
public void propertyChange(PropertyChangeEvent evt) {
// TODO Auto-generated method stub
if(evt.getPropertyName() == JFileChooser.SELECTED_FILE_CHANGED_PROPERTY){
File f = (File) evt.getNewValue();
if(f == null){
setIcon(null);
return;
}
ImageIcon icon = new ImageIcon(f.getPath());
if(icon.getIconWidth() > getWidth())
icon = new ImageIcon(icon.getImage().getScaledInstance(getWidth(), -1, Image.SCALE_DEFAULT));
setIcon(icon);
}
}
});
}
}
class FileIconView extends FileView{
private FileFilter filter;
private Icon icon;
public FileIconView(FileFilter aFilter, Icon anIcon){
filter = aFilter;
icon = anIcon;
}
public Icon getIcon(File f){
if(!f.isDirectory() && filter.accept(f))
return icon;
else
return null;
}
}
import java.awt.Dimension;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.io.File;
import java.util.ArrayList;
import javax.swing.BorderFactory;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.filechooser.FileFilter;
import javax.swing.filechooser.FileNameExtensionFilter;
import javax.swing.filechooser.FileView;
public class FileChooserTest {
public static void main(String[] args) {
ImageViewerFrame frame = new ImageViewerFrame();
frame.setTitle("java文件选择");
frame.setLocation(300, 200);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(500, 400);
frame.setVisible(true);
}
}
class ImageViewerFrame extends JFrame{
private static final int DEFAULT_WIDTH = 300;
private static final int DEFAULT_HEIGHT = 400;
private JLabel label;
private JFileChooser chooser;
public ImageViewerFrame(){
setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
JMenuBar menuBar = new JMenuBar();
setJMenuBar(menuBar);
JMenu menu = new JMenu("File");
menuBar.add(menu);
JMenuItem openItem = new JMenuItem("Open");
menu.add(openItem);
openItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
chooser.setCurrentDirectory(new File("."));
// System.out.println("start");
int result = chooser.showOpenDialog(ImageViewerFrame.this);
// System.out.println("end");
// System.out.println(result);
if(result == JFileChooser.APPROVE_OPTION){
String name = chooser.getSelectedFile().getPath();
// System.out.println(name);
label.setIcon(new ImageIcon(name));
pack();
}
}
});
JMenuItem exitItem = new JMenuItem("Exit");
menu.add(exitItem);
exitItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
System.exit(0);
}
});
label = new JLabel();
add(label);
chooser = new JFileChooser();
final ExtensionFileFilter filter = new ExtensionFileFilter();
filter.addExtension("jpg");
filter.addExtension("jpeg");
filter.addExtension("gif");
filter.setDescription("Image files");
FileNameExtensionFilter filter2 = new FileNameExtensionFilter("Image files", "jpg", "jpeg", "gif");
chooser.setFileFilter(filter);
chooser.setAccessory(new ImagePreviewer(chooser));
chooser.setFileView(new FileIconView(filter2, new ImageIcon("palette.gif")));
}
}
class ExtensionFileFilter extends FileFilter{
private String description = "";
private ArrayList<String> extensions = new ArrayList<String>();
public void addExtension(String extension){
if(!extension.startsWith("."))
extension = "." + extension;
extensions.add(extension.toLowerCase());
}
@Override
public boolean accept(File f) {
if(f.isDirectory())
return true;
String name = f.getName().toLowerCase();
for(String extension : extensions)
if(name.endsWith(extension))
return true;
return false;
}
public void setDescription(String aDescription){
description = aDescription;
}
@Override
public String getDescription() {
// TODO Auto-generated method stub
return description;
}
}
class ImagePreviewer extends JLabel{
public ImagePreviewer(JFileChooser chooser){
setPreferredSize(new Dimension(100, 100));
setBorder(BorderFactory.createEtchedBorder()); //etched:浮雕化
chooser.addPropertyChangeListener(new PropertyChangeListener() {
public void propertyChange(PropertyChangeEvent evt) {
// TODO Auto-generated method stub
if(evt.getPropertyName() == JFileChooser.SELECTED_FILE_CHANGED_PROPERTY){
File f = (File) evt.getNewValue();
if(f == null){
setIcon(null);
return;
}
ImageIcon icon = new ImageIcon(f.getPath());
if(icon.getIconWidth() > getWidth())
icon = new ImageIcon(icon.getImage().getScaledInstance(getWidth(), -1, Image.SCALE_DEFAULT));
setIcon(icon);
}
}
});
}
}
class FileIconView extends FileView{
private FileFilter filter;
private Icon icon;
public FileIconView(FileFilter aFilter, Icon anIcon){
filter = aFilter;
icon = anIcon;
}
public Icon getIcon(File f){
if(!f.isDirectory() && filter.accept(f))
return icon;
else
return null;
}
}