📄 imagepanel.java
字号:
import javax.swing.*;
import java.awt.*;
import javax.imageio.*;
import java.awt.image.*;
import java.io.*;
import javax.swing.plaf.*;
import java.awt.event.*;
public class ImagePanel extends JPanel {
public ImagePanel()
{
iFrame=new ImageFrame(this);
l=new JLabel();
add(l);
}
public void paintScaledImages() //绘制缩略图
{
int j=0;
Graphics g=imageBoard.getGraphics();
g.setColor(super.getBackground()); //填充背景色
g.fillRect(0,0,imageBoard.getWidth(),imageBoard.getHeight());
x=5; //各缩略图坐标起点
y=5;
try{
iToF=new int[files.length]; //存储各显示图像的文件数组号
for(int i=0;i<files.length;i++)
{
iToF[i]=-1; //初始化数组元素
if(!files[i].isDirectory())
{
image=ImageIO.read(files[i]); //读取图像文件
if(image!=null)
{
int wO=image.getWidth();
int hO=image.getHeight();
int s=(wO/w >= hO/h) ? (wO/w+1):(hO/h+1); //计算缩小比例
scaledImage=image.getScaledInstance(wO/s,hO/s,Image.SCALE_FAST); //定义缩略图图像
g.drawImage(scaledImage,x+(w-wO/s)/2,y+(h-hO/s)/2,null); //画出缩略图
iToF[j]=i; //存储文件数组序数
j++;
x+=w+5;
if(x/(w+5)>6)
{
x=5;
y+=h+10;
}
}
}
}
}catch(IOException exc){
//JOptionPane.showMessageDialog(this,exc);
}catch(NullPointerException ex){
//
}catch(OutOfMemoryError er){
JOptionPane.showMessageDialog(this,er);
}
}
public void fileChanged(File f) //所选文件改变时调用
{
w=(super.getWidth()-60)/7; //设置缩略图宽高
h=w;
remove(l); //取消前一次图像显示
files=f.listFiles();
imageBoard=new BufferedImage((w+5)*7,(h+10)*(files.length/7+1),BufferedImage.TYPE_INT_RGB); //定义缩略图画板
paintScaledImages(); //画出缩略图
remove(l);
l=new JLabel(new ImageIcon(imageBoard));
l.setIcon(new ImageIcon(imageBoard));
add(l); //添加缩略图标签
super.updateUI();
l.addMouseListener(new MouseHandler()); //处理鼠标事件
}
public void setImage(int i)
{
iNum=i;
if(iNum!=iToF.length && iNum!=-1 && iToF[iNum]!=-1) //判断iNum的有效性
{
File f=files[iToF[iNum]];
try
{
image=ImageIO.read(f); //读取图形文件
if(image!=null)
{
try{
iFrame.setImage(image,iNum); //显示该图像
iFrame.setVisible(true);
}catch(OutOfMemoryError er){
JOptionPane.showMessageDialog(this,er);
}
}
}catch(IOException exc)
{
//
}
}
}
private class MouseHandler extends MouseAdapter
{
public void mouseClicked(MouseEvent e)
{
if(e.getButton()==e.BUTTON1 && e.getClickCount()==2) //鼠标双击时响应
{
setImage(e.getY()/(h+10)*7+e.getX()/(w+5));
}
}
}
protected ImageFrame iFrame;
protected int x,y;
protected int w,h;
protected int iNum;
protected int[] iToF;
protected File[] files;
protected BufferedImage image;
protected Image scaledImage;
protected BufferedImage imageBoard;
protected JLabel l;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -