⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 imagepanel.java

📁 Java实现的图片阅览程序
💻 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 + -