JFileChooser

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;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值