支持图片预览的文件选择对话框

来源:互联网 发布:淘宝上评价怎么删除 编辑:程序博客网 时间:2024/05/16 19:00

    本实例在文件选择器JFileChooser类的基础上开发了支持图片预览效果的文件选择对话框。在选择图片文件,特别是选择数码相机中的随机命名的图片时极为方便。实例的效果如下:

  

完整代码如下:

package cn.whut.num;import java.awt.BorderLayout;import java.awt.Color;import java.awt.Dimension;import java.awt.EventQueue;import java.awt.Image;import java.io.File;import javax.swing.ImageIcon;import javax.swing.JFileChooser;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JPanel;import javax.swing.border.EmptyBorder;import javax.swing.border.LineBorder;import javax.swing.filechooser.FileNameExtensionFilter;import java.beans.PropertyChangeListener;import java.beans.PropertyChangeEvent;import javax.swing.JButton;import java.awt.event.ActionListener;import java.awt.event.ActionEvent;public class PreviewFileDialog extends JFrame {        private static final long serialVersionUID = 1L;private JPanel contentPane;    private JFileChooser fileChooser;    private ImagePreviewer imageLabel;    private ImagePreviewer previewer;        /**     * Launch the application.     */    public static void main(String[] args) {        EventQueue.invokeLater(new Runnable() {            public void run() {                try {                    PreviewFileDialog frame = new PreviewFileDialog();                    frame.setVisible(true);                } catch (Exception e) {                    e.printStackTrace();                }            }        });    }        /**     * Create the frame.     */    public PreviewFileDialog() {        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);        setBounds(100, 100, 629, 428);        contentPane = new JPanel();        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));        contentPane.setLayout(new BorderLayout(0, 0));        setContentPane(contentPane);                JPanel panel = new JPanel();        contentPane.add(panel, BorderLayout.NORTH);                JButton chooseButton = new JButton(                "\u9009\u62E9\u56FE\u7247\u6587\u4EF6");        chooseButton.addActionListener(new ActionListener() {            public void actionPerformed(ActionEvent e) {                do_button_actionPerformed(e);            }        });        panel.add(chooseButton);                imageLabel = new ImagePreviewer((JFileChooser) null);        contentPane.add(imageLabel, BorderLayout.CENTER);        initFileChooser();    }        /**     * 初始化文件选择器     */    private void initFileChooser() {        fileChooser = new JFileChooser();// 创建文件选择器        previewer = new ImagePreviewer(fileChooser);// 创建图片预览标签        fileChooser.setFileFilter(new FileNameExtensionFilter("图片文件", "jpg",                "gif", "png"));        // 为指定属性变更添加事件监听器        fileChooser.addPropertyChangeListener("SelectedFileChangedProperty",                new PropertyChangeListener() {                    public void propertyChange(PropertyChangeEvent evt) {                        // 属性改变时设置预览标签的图片                        previewer.setImageFile((File) evt.getNewValue());                    }                });        fileChooser.setAccessory(previewer);    }        /**     * 选择图片文件按钮的事件处理方法     *      * @param e     */    protected void do_button_actionPerformed(ActionEvent e) {        int option = fileChooser.showOpenDialog(this);// 显示打开文件对话框        if (option == JFileChooser.APPROVE_OPTION) {            // 获取选择的文件对象            File file = fileChooser.getSelectedFile();            // 更新窗体中图片            imageLabel.setImageFile(file);        }    }}/** * 自定义图片预览标签 *  */class ImagePreviewer extends JLabel {    public ImagePreviewer(JFileChooser chooser) {        // 初始大小        setPreferredSize(new Dimension(200, 200));        setHorizontalAlignment(JLabel.CENTER);// 水平居中        setBorder(new LineBorder(Color.GRAY));// 设置边框        setOpaque(true);// 标签不透明        setBackground(Color.WHITE);// 设置背景色        setText("没有设置图片");// 默认文本    }        /**     * 设置标签图片的方法     *      * @param file     */    public void setImageFile(File file) {        setText("");// 清空图片预览标签的文本        if (file == null) {// 如果文件对象为空            setText("没有设置图片");// 设置默认提示文本            return;// 终止方法        }        // 创建图标对象        ImageIcon icon = new ImageIcon(file.getPath());        if (icon.getIconWidth() > getWidth()) {// 设置图标大小            icon = new ImageIcon(icon.getImage().getScaledInstance(getWidth(),                    -1, Image.SCALE_DEFAULT));        }        setIcon(icon);// 为标签设置图标        repaint();// 重新绘制界面    }}


 

0 0