本人正在做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 它就可以了, 这个真的不是问题!