
import javax.swing.JFrame; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; import java.awt.Image; import javax.swing.JButton; import javax.swing.JPanel; import java.awt.Graphics; import java.awt.BorderLayout; import javax.swing.JFileChooser; import java.io.File; import javax.swing.filechooser.FileFilter; import java.awt.Toolkit; /** *目的:打开一个图片,并且缩放它 *习惯了eclipse,今天用EditPlus搞一把,结果.... *结果感觉挺好,就是有点累,什么都得自己动手来,比如解个扣.... */ public class ImageFileFilterImageScale extends JFrame implements ActionListener{ Image img;//一张图片,什么图片,看下面怎么定它的? JButton getPictureButton = new JButton("获得图片"); public ImageFileFilterImageScale(){ this.setSize(300,300); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //定义一个装图片的面板 JPanel picPanel = new PicturePanel();//怎么装?看下面它的paint画方法吧 this.add(picPanel,BorderLayout.CENTER); JPanel buttonPanel = new JPanel(); getPictureButton.addActionListener(this); buttonPanel.add(getPictureButton); this.add(buttonPanel,BorderLayout.SOUTH); this.setVisible(true); } class PicturePanel extends JPanel{ public void paint(Graphics g){//原来你是这么画的啊! g.drawImage(img,0,0,this); } } public void actionPerformed(ActionEvent e){ String file = getImageFile();//这里又调用了一个方法,看下面 if(file != null){//这是前提,不能不选择吧 //Toolkit:工具包,俺的理解,它是一个百宝箱,能做的事儿太多啦! Toolkit kit = Toolkit.getDefaultToolkit(); img = kit.getImage(file);//从百宝箱里拿一幅画给你 /**getScaleInstance()是指返回图像的缩放版本。 *宽300,俺理解,-1是高吗?答案是: *如果 width 或 height 为负数,则替换该值以维持初始图像尺寸的高宽比。 *如果 width 和 height 都为负,则使用初始图像尺寸。 *scale_smooth 选择图像平滑度比缩放速度具有更高优先级的图像缩放算法。 */ img = img.getScaledInstance(300,-1,Image.SCALE_SMOOTH); this.repaint(); } } private String getImageFile(){ JFileChooser fc = new JFileChooser();//新建一个文件选择器 fc.setFileFilter(new ImageFilter());//设置过滤类型,看下面重写的格式 int result = fc.showOpenDialog(null); File file = null;//先设置这个文件为空 if(result == JFileChooser.APPROVE_OPTION){ file = fc.getSelectedFile();//你选择什么,我的file就是什么 return file.getPath(); }else{ return null; } } public static void main(String[] args) { new ImageFileFilterImageScale(); } } class ImageFilter extends FileFilter{重写了ImageFilter(),我们要过滤什么格式的文件 public boolean accept(File f){ if(f.isDirectory()){//是目录,返回true return true; } String name = f.getName(); if(name.matches(".*((.jpg)|(.gif)|(.png))")){ return true; }else{ return false; } } public String getDescription(){ return "图片格式(*.jpg,*.gif,*.png)"; } }