当前位置: 代码迷 >> J2SE >> 前辈们快来帮帮我(关于如何实现图片的放大和缩小功能?)
  详细解决方案

前辈们快来帮帮我(关于如何实现图片的放大和缩小功能?)

热度:98   发布时间:2016-04-23 19:38:21.0
前辈们快来帮帮小弟我(关于怎么实现图片的放大和缩小功能?)
本人正在做java的图片浏览器,但是我想不到怎么去增加图片的放大和缩小的功能??以下是我的现在的代码!

这代码是主要类
import java.applet.Applet;
import java.awt.*;
import java.io.*;
import javax.swing.JFrame;
import javax.swing.JLabel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JPanel;
import javax.swing.filechooser.FileNameExtensionFilter;
class Interfaces01  extends Applet implements ActionListener  
{
/**
 * 
 */
ImagePanel showImagePane=new ImagePanel();
private static final long serialVersionUID = 1L;//?
//定义要用的变量
String FILE_TYPE=".jpg";
Filter ft;//定义过滤器变量
JButton previous;
JButton next;
JButton fd;
JButton sx;
JButton xz;
JButton select;
JFrame f;
JPanel jp ,jpc;
File file ,file1= null;
String[] b;
String filename,path,dir;
double r;
boolean isangled;
int i;
JLabel l;
//构造方法  打开界面与退出小程序
public Interfaces01() 
{
jiemian();
this.f.addWindowListener(new WindowAdapter() 
{
public void windowClosing(WindowEvent e)
{
System.exit(1);
}
});
}
public void jiemian() //界面设计
{
  f=new JFrame("牛B图片浏览器");  //窗口
//f.setLayout(null);//绝对定位
jp=new JPanel();     //实例化按钮界面  
//设计窗口属性
f.setSize(1000,600);
//f.setLocation(200,100);

//定义按钮
 previous=new JButton("上一张");
 next=new JButton("下一张");
 fd=new JButton("放大");
 sx=new JButton("缩小");
 xz=new JButton("旋转");
 select =new JButton("选择图片");

//按钮加入界面
jp.add(previous);
jp.add(next);
jp.add(fd);
jp.add(sx);
jp.add(xz);
jp.add(select );
//加入监听
this.previous.addActionListener(this);
this.next.addActionListener(this);
this.fd.addActionListener(this);
this.sx.addActionListener(this);
this.xz.addActionListener(this);
this.select.addActionListener(this);
jpc=new JPanel();  //实例化放图片的界面
//界面加入窗口   方向布局界面
f.add(jp,BorderLayout.SOUTH);  //此界面放南部
f.add(jpc,BorderLayout.CENTER); //居中
f.setVisible(true);   
}
public void actionPerformed(ActionEvent e) 
{
//触发按钮
JButton click = (JButton) e.getSource(); 
if(click==select)
{
open();
}
if(click==previous)
{
previous();
}
if(click==next)
{
next();
}
if(click==xz)
{
xz();
}
if(click==fd)
{

}
if(click==sx)
{

}
}
//打开图片的方法
public  void open()
{
l=new JLabel();  //实例化标签  --> 用于放置图片
jpc.add(l);
jpc.setVisible(true);
int result=0;
JFileChooser chooser=new JFileChooser();  //实例化此类实现选择过滤
FileNameExtensionFilter filter =new FileNameExtensionFilter("*.JPG", "jpg");  //只留下jpg类型文件
chooser.setFileFilter(filter);  //设置当前文件过滤器。文件选择器使用文件过滤器从用户的视图中过滤文件
//chooser.setCurrentDirectory(new File(""));    //设置当前目录。传入 null 会设置文件选择器指向用户的默认目录。此默认目录取决于操作系统。在 Windows 上通常是“我的文档”,
result=chooser.showOpenDialog(this.f);     //打开一个选择文件的窗口

if(result==JFileChooser.APPROVE_OPTION)  //点了文件选择窗口的打开按钮就执行如下
{
file= chooser.getSelectedFile();   //获得选择的文件
//l.setText("打开的文件名称为:"+filename);
}
if(file!=null)  //获得的文件不为空
{  
 path= chooser.getCurrentDirectory().getPath();   //获得选择文件的路径
 filename=chooser.getSelectedFile().getName();   //获得选择文件的名字
 dir=path+File.separator+filename;
 l.setIcon(new ImageIcon(dir));   //打开图片dir路径下文件
 file=chooser.getCurrentDirectory();  //获得当前目录 
 ft=new Filter(FILE_TYPE);    //创建Filter类  实现浏览时的文件过滤
// b=file.list();     //当前目录下的文件赋值给b数组
 b=file.list(ft);   //过滤b数组的文件
/* System.out.println(filename+path);
 for(int h=0;h<file.length();h++)
 {
System.out.println(b[h]); 
 }*/
 //追踪图片      获得当前图片在数组中的位置
 for(int j=0;j<b.length;j++)
 {
 if(b[j].equals(filename))
 {
 i=j;
 break;
 }
 } 
}
}
//  上一张的函数    
public void previous()
{
//实现循环浏览   i为上面追踪到的图片在数组中的位置
if (i==0)
{
i=b.length-1;
}else
{
i--;
}
//打开dir路径下的图片
dir=path+File.separator+b[i];

if(file!=null)
{
  
l.setIcon(new ImageIcon(dir));
 
}
}
//下一张的函数
public void next()
{
if (i==b.length-1)
{
i=0;
}else
{
i++;
}
dir=path+File.separator+b[i];

if(file!=null)
{  
l.setIcon(new ImageIcon(dir));
}
}
//未完成的旋转
public void xz()
{
isangled=true;
r += Math.PI/2;
repaint();
xz.setEnabled(true);
}
}

这的代码是文件的过滤类
import java.io.*;
public class Filter implements FilenameFilter 
{
String e;
public Filter(String e)
{
this.e=e;
}
@Override
public boolean accept(File dir, String filename)
{
return filename.endsWith(e);
}
}

这的代码是运行类
public class Strat {
public static void main(String[] args) {
new Interfaces01();
}
}

问题如下:
1、在这的代码的基础上怎么去增加图片的放大和缩小的功能了??请会的朋友以代码的形式来实现给我看看!!(本人是java的初学者,请写代码的同时配上一定的解析,谢谢了!!)
------解决思路----------------------
可以使用java自带的缩放功能,这需要你的程序结构有一些改变:

你需要替换掉现有的JLable显示图片,用一个继承JPanel的类完成这个功能。重写paint和update方法(他俩执行一样的代码),利用graphics将需要的图片绘制到屏幕上。这时你发现graphics的drawImage方法有一个10参数重载,其中中间的8个参数就是用来指定源矩形和目标矩形的,通过这两个矩形来控制图片的缩放(比如源矩形固定,你控制目标矩形大小,就能实现将源图片放缩到指定尺寸(即目标矩形大小)的功能)。
------解决思路----------------------
Java2D已经提供了这种API
你只要call 它就可以了, 这个真的不是问题!
  相关解决方案