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

    本实例在文件选择器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();// 重新绘制界面}
}


 


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部