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

📄 photoalbum.java

📁 几个基础的java Applet程序
💻 JAVA
字号:
import java.awt.*;
import java.net.*;
import java.awt.event.*;
import java.applet.*;
//定义PhotoAlbum类
public class PhotoAlbum extends Applet {
	//Applet组件
	private Panel buttonPanel = new Panel(); //默认值为FlowLayout
	private Panel picturePanel = new Panel(); //默认值为FlowLayout
	private PhotoCanvas canvas = new PhotoCanvas(); //图像浏览器
	private Button bck = new Button("上一副图"); //显示上一副图的按钮
	private Button fwd = new Button("下一幅图"); //显示下一副图的按钮
	private Button fit = new Button("调整图片大小"); //调整图像大小的按钮
	private Label showing = new Label("正在显示:"); //表示显示状态的标签
	private TextField txt = new TextField("无", 10); //表示状态的文字
	//其他变量
	private Image[] photos;
	private String[] imageNames;
	private URL url;
	private int currIdx = -1;
	//由html文档初始化的变量
	private String numPhotosString;
	private int num_photos;
	private String image_loc;	
        //获取小应用程序的相关信息
	public String getAppletInfo(){
		return new String("by Ali, version 1.0, Copyright (c) 2003.");
	}
	//初始化,当浏览器创建一个Applet时该方法将被调用
	public void init() {		
		//为避免错误,这一行必须最先被运行
		loadParameters();//调用自定义的方法
		photos = new Image[num_photos];
		//添加所有的GUI组件
		setLayout(new BorderLayout(2,2) );
		add(picturePanel, BorderLayout.CENTER);
		add(buttonPanel, BorderLayout.SOUTH);
		canvas.setSize( getSize() );
		canvas.setBackground( Color.white );
		picturePanel.add(canvas);
		buttonPanel.add(bck);
		buttonPanel.add(fwd);
		buttonPanel.add(showing);
		showing.setBackground( Color.lightGray );
		buttonPanel.add(txt);
		buttonPanel.add(fit);
		txt.setBackground( Color.lightGray );
		txt.setEditable( false );
		setBackground( Color.lightGray ); //小应用程序的颜色
		//为按钮添加鼠标事件侦测器
		bck.addMouseListener( new MouseAdapter(){
			public void mouseClicked(MouseEvent e) {
				showPreviousImage();
			}
		});		
		fwd.addMouseListener( new MouseAdapter(){
			public void mouseClicked(MouseEvent e) {
				showNextImage();
			}
		});
		fit.addMouseListener( new MouseAdapter(){
			public void mouseClicked(MouseEvent e) {
				fitImage();
			}
		});
		//作为欢迎信息显示在屏幕上
		canvas.setText("请单击[下一副图]按钮,开始浏览图片");
	}
	//当浏览器启动Applet或者小应用程序初始化完毕之后,该方法将被调用 
	public void start() {
		//使画布完全占满空白区域
		canvas.setSize( picturePanel.getSize() );
	}
	//当浏览器失去焦点时,该方法将被调用
	public void stop() {
	}
	//当Applet被刷新或者当用户关闭浏览器时,该方法将被调用 
	public void destroy() {
	}
	//这是Applet实现在屏幕上输出的方法,可以实现按钮、文字、图像等等,
	//在本实例中,PhotoCanvas类被用来作为显示图像的画布组件。 
	public void paint(Graphics g) {
	}
	//该方法从html文档中获得信息,允许用户设置小应用程序的某些行为。  
	//NUM_PHOTOS 指本实例中所要显示的图像数量.
	//IMAGE_LOC 存放本实例所要图片的文件夹路径.
	//IMAGEx 是一个用来按照名称上载每张图片的驻足点,x的值从1到NUM_PHOTOS
	private void loadParameters(){		
		String param;
                //获得图片数量
		num_photos = 1;
		numPhotosString = getParameter("NUM_PHOTOS");
		if (numPhotosString != null) {
			try{
				num_photos = Integer.parseInt( numPhotosString );
			}catch(Exception e){
				//默认值为1
			}
		}
                //获取包含图片的文件夹名称
		image_loc = getParameter("IMAGE_LOC");
		if (image_loc == null)
			image_loc = ".";
		        //默认值是小应用程序所在的文件夹
                //初始化用来存放图片的数组
		imageNames = new String[num_photos];
                //循环,获取所有的图片名称
		for (int i=0; i < num_photos; i++ )
		{
			param = new String("IMAGE" + String.valueOf(i+1));
			imageNames[i] = new String(getParameter(param));
		}
	}
        //递减图片索引
	public void showPreviousImage() {	
		currIdx--;
		if (currIdx < 0)
			currIdx = num_photos - 1;	
		displayPhoto(currIdx);
	}
        //递增图片索引
	public void showNextImage() {	
		currIdx++;
		if (currIdx == num_photos)
			currIdx = 0;	
		displayPhoto(currIdx);
	}
        //上载图片,并且显示	
	private void displayPhoto(int idx){	
		String path = "getImage not called";
		String text = "";
		try{
                        //将图片存放到内存中
			if (photos[idx] == null){
				canvas.setText("正在载入图片,请稍后...");
				path = image_loc + "/" + imageNames[idx];
				photos[idx] = getImage(getCodeBase(), path );
			}
			//更新PhotoCanvas.
			canvas.setImage( photos[idx] );
			//更新显示文字			
			text = new String( "第" + (idx + 1) + "幅,共" + num_photos+"幅" );
			txt.setText( text );
		}catch(Exception e){
			//只有对AppletViewer.exe起作用
			e.printStackTrace();
		}
	}
        //该方法计算图像大小、估计比例,并且与PhotoCanvas做比较,
        //然后对图像进行拉伸或挤压,使其恰好能放在给定的显示区域中。
	public void fitImage(){		
		float imgH=1, imgW=1, scrH=1, scrW=1;
		float imgRat=1, scrRat=1;
		float multiplier=1;
		int width=100, height=100;
		Image tempImage;
                //如果图片已经准备好,才执行下面的语句
		if (currIdx >= 0 && photos[currIdx] != null){
			scrH = canvas.getSize().height;
			scrW = canvas.getSize().width;
			imgH = photos[currIdx].getHeight(canvas);
			imgW = photos[currIdx].getWidth(canvas);
			imgRat = imgW/imgH;
			scrRat = scrW/scrH;
			//调整高度
			if (imgRat <= scrRat){
				multiplier = scrH/imgH;
			}
			else{
				//调整宽度
				multiplier = scrW/imgW;
			}
			width = (int)(imgW * multiplier);
			height = (int)(imgH * multiplier);
			//调整后生成图片
			tempImage = photos[currIdx].getScaledInstance( 
				width, height, Image.SCALE_SMOOTH );
			//显示调整后的图片
			canvas.setImage(tempImage);
			//更换数组中的旧图片
			if (width != imgW)
				photos[currIdx] = tempImage;
		}
	}	
}
//PhotoCavas类,调用setter方法
class PhotoCanvas extends Canvas {	
	private String text;
	private Image image;	
        //构造函数,用来初始化私有变量
	public PhotoCanvas(){
		text = new String();
	}
        //显示文字,将图片设置为null
	public void setText(String text) {
		this.text = text;
		image = null;
		repaint();
	}
        //显示图片,将文字设置为空
	public void setImage(Image img){
		image = img;
		text = "";
		repaint();
	}
        //覆盖paint方法
	public void paint(Graphics g) {	
		if (text.length() > 0){
			//显示必要的文字
			g.drawString(text, 20,20);
		}
		if (image != null){
			//将图片保留在画布上
			g.drawImage(image, 0, 0,this);
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -