package com.swing.demo; import java.awt.Dimension; import java.awt.EventQueue; 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 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.FileNameExtensionFilter; import javax.swing.filechooser.FileView; /** * * 基于Java图形界面 图片上传 * * FleNameExtensionFilter 过滤文件上传 * PropertyChangeListener 监听某个控件发生改变是触发事件 * * @author Administrator * */ public class FileChooserTest { public static void main(String[] agrs){ EventQueue.invokeLater(new Runnable(){ public void run() { ImageViewerFrame frame = new ImageViewerFrame(); frame.setDefaultCloseOperation(3); frame.setVisible(true); } }); } } class ImageViewerFrame extends JFrame{ public ImageViewerFrame(){ setTitle("FileChooserTest"); setSize(500,300); 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 FileOpenListener()); JMenuItem exitItem = new JMenuItem("Exit"); menu.add(exitItem); exitItem.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e) { System.exit(0); } }); label = new JLabel(); add(label); chooser = new JFileChooser(); //过滤上传的文件 FileNameExtensionFilter filter = new FileNameExtensionFilter( "Image files","jpeg","jpg","gif"); chooser.setFileFilter(filter); chooser.setAccessory(new ImagePreviewer(chooser)); chooser.setFileView(new FileIconView(filter,new ImageIcon("palette.gif"))); } private class FileOpenListener implements ActionListener{ public void actionPerformed(ActionEvent e) { chooser.setCurrentDirectory(new File(".")); //show file chooser d dialog int result = chooser.showOpenDialog(ImageViewerFrame.this); //if image file accepted set it as icon of the label if(result == JFileChooser.APPROVE_OPTION){ //获取路径 String name = chooser.getSelectedFile().getParent(); label.setIcon(new ImageIcon(name)); } } } private JLabel label; private JFileChooser chooser; } class FileIconView extends FileView{ public FileIconView(FileNameExtensionFilter filter2,Icon anIcon){ this.filter = filter2; this.icon = anIcon; } public Icon getIcon(File f){ if(! f.isDirectory() && filter.accept(f)) return icon; else return null; } private FileNameExtensionFilter filter; private Icon icon; } /* * 获取图片,并将图片映射到JLabel components 上 */ class ImagePreviewer extends JLabel{ public ImagePreviewer(JFileChooser chooser){ setPreferredSize(new Dimension(100,100)); setBorder(BorderFactory.createEtchedBorder()); chooser.addPropertyChangeListener(new PropertyChangeListener(){ public void propertyChange(PropertyChangeEvent ev) { if(ev.getPropertyName() == JFileChooser.SELECTED_FILE_CHANGED_PROPERTY){ //the user has selected a new file File f = (File)ev.getNewValue(); //可以根据名称和路径读取图像 //System.out.println(f.getName()); //System.out.println(f.getPath()); if(f == null){ setIcon(null); return; } //read the image into an icon ImageIcon icon = new ImageIcon(f.getPath()); //if the icon is too Target to fit , scale it if(icon.getIconWidth() > getWidth() ) icon = new ImageIcon(icon.getImage() .getScaledInstance(getWidth(), - 1,Image.SCALE_DEFAULT)); setIcon(icon); } } }); } }