Internet Start Page  TOP  
 Road of Developers
 
 


DownLoad ImagesChanger.lzh(ソースコード付き)


//////////////////////////////////////////////////////////////////
// ImagesChangerアプレット / I-ichirow Suzuki
// ImageChanger.java
// 
import java.applet.*;
import java.awt.*;
import java.awt.image.*;
import java.util.*;
import java.net.*;
//-------------------------------------------------------------
public class ImageChanger extends Applet implements Runnable {
	final int FADEMAX = 16;
	final int FADEWID = 64;
	final int EFFECTNUM = 20;
	final int PADX = 10;
	final int PADY = 10;
	final int NONE = 0;
	final int SCROLLUP = 1;
	final int SCROLLDOWN = 2;
	final int SCROLLRIGHT = 3;
	final int SCROLLLEFT = 4;
	final int TEARVERTICAL = 5;
	final int TEARHORIZONTAL = 6;
	final int OPEN = 7;
	final int CLOSE = 8;
	final int FADE = 9;
	final int MOSAIC = 10;
	final int TEARUP = 11;
	final int TEARDOWN = 12;
	final int TEARRIGHT = 13;
	final int TEARLEFT = 14;
	final int SLIDEUP = 15;
	final int SLIDEDOWN = 16;
	final int SLIDERIGHT = 17;
	final int SLIDELEFT = 18;
	final int SHRINKVERTICAL = 19;
	final int SHRINKHORIZONTAL = 20;
	Dimension mySize;
	MediaTracker tracker;
	Image[] images;
	String[] imageFile;
	int[] change;
	int[] time;
	String imageDir = ".";
	int imageNum;
	int defaultChange;
	int defaultTime = 5000;
	Color fadeColor = Color.black;
	Color bgColor = Color.black;
	Color fontColor = Color.white;
	Color fontShadowColor;
	Color fontLineColor;
	Color fontBackColor;
	int scrollSpeed = 6;
	int changeSpeed = 3;
	int fadeTime = 80;
	Image[] fadeImage = new Image[FADEMAX];
	Image mosaicImage;
	Thread kicker;
	int current;
	Graphics offScreen;
	Graphics onScreen;
	Image offImage;
	boolean drawWhileLoading = true;
	int mosaicWidth = 16;
	int mosaicHeight = 16;
	int mosaicSpeed = 4;
	Random rand;
	URL[] url;
	boolean randomOrder = false;
	boolean randomEffect = false;
	boolean cursorIn = false;
	boolean autoLink = false;
	boolean linked = false;
	AppletContext context;
	String[] title;
	Point[] titlePos;
	Rectangle[] titleBackArea;
	Font font;
	FontMetrics metrics;
	String target;
	String frame;
	//-------------------------------------------------------------
	public void init() {
		setBackground(bgColor);
		String s;
		s = getParameter("imageDir");
		if (s != null) imageDir = s;
		s = getParameter("change");
		if (s != null) defaultChange = Integer.parseInt(s);
		s = getParameter("time");
		if (s != null) defaultTime = Integer.parseInt(s);
		s = getParameter("fadeColor");
		if (s != null) fadeColor = new Color(Integer.parseInt(s, 16));
		s = getParameter("bgColor");
		if (s != null) bgColor = new Color(Integer.parseInt(s, 16));
		s = getParameter("fontColor");
		if (s != null) fontColor = new Color(Integer.parseInt(s, 16));
		s = getParameter("fontLineColor");
		if (s != null) fontLineColor = new Color(Integer.parseInt(s, 16));
		s = getParameter("fontShadowColor");
		if (s != null) fontShadowColor = new Color(Integer.parseInt(s, 16));
		s = getParameter("fontBackColor");
		if (s != null) fontBackColor = new Color(Integer.parseInt(s, 16));
		s = getParameter("scrollSpeed");
		if (s != null) scrollSpeed = Integer.parseInt(s);
		s = getParameter("changeSpeed");
		if (s != null) changeSpeed = Integer.parseInt(s);
		s = getParameter("fadeTime");
		if (s != null) fadeTime = Integer.parseInt(s) / FADEMAX;
		s = getParameter("drawWhileLoading");
		if (s != null) drawWhileLoading = Boolean.valueOf(s).booleanValue();
 		s = getParameter("mosaicWidth");
		if (s != null) mosaicWidth = Integer.parseInt(s);
  		s = getParameter("mosaicHeight");
		if (s != null) mosaicHeight = Integer.parseInt(s);
  		s = getParameter("mosaicSpeed");
		if (s != null) mosaicSpeed = Integer.parseInt(s);
 		s = getParameter("randomOrder");
		if (s != null) randomOrder = Boolean.valueOf(s).booleanValue();
		s = getParameter("randomEffect");
		if (s != null) randomEffect = Boolean.valueOf(s).booleanValue();
		s = getParameter("fontSize");
		font = new Font("Serif", Font.PLAIN, (s == null)?12:Integer.parseInt(s));
		s = getParameter("target");
		if (s != null) target = s;
		s = getParameter("frame");
		if (s != null) frame = s;
		s = getParameter("autoLink");
		if (s != null) autoLink = Boolean .valueOf(s).booleanValue();
		mySize = size();
		rand = new Random();
		context = getAppletContext();
		initImages();
		initTitles();
    }
	//-------------------------------------------------------------
	private void initImages() {
		String s = getParameter("images");
		StringTokenizer t1 = new StringTokenizer(s, ",");
		imageNum = t1.countTokens();
		images = new Image[imageNum];
		imageFile = new String[imageNum];
		change = new int[imageNum];
		time = new int[imageNum];
		url = new URL[imageNum];
		int count = 0;
		while (t1.hasMoreTokens()) {
			s = t1.nextToken();
			StringTokenizer t2 = new StringTokenizer(s, "|");
			imageFile[count] = t2.nextToken().trim();
			change[count] = defaultChange;
			if (t2.hasMoreTokens()) {
				s = t2.nextToken().trim();
				try {
					if (s != null && !s.equals("-")) change[count] = Integer.parseInt(s);
				} catch (NumberFormatException e) {
				}
			}
			time[count] = defaultTime;
			if (t2.hasMoreTokens()) {
				s = t2.nextToken().trim();
				try {
					if (s != null && !s.equals("-")) time[count] = Integer.parseInt(s);
				} catch (NumberFormatException e) {
				}
			}
			if (t2.hasMoreTokens()) {
				s = t2.nextToken().trim();
				try {
					if (s != null && !s.equals("-")) url[count] = new URL(s);
				} catch (MalformedURLException e) {
					try {
						url[count] = new URL(getDocumentBase(), s);
					} catch (MalformedURLException ex) {
					}
				}
			}
			count++;
		}
	}
	//-------------------------------------------------------------
	private void initTitles() {
	    int count = 0;
	    title = new String[imageNum];
	    titlePos = new Point[imageNum];
	    if (fontBackColor != null) {
    	    titleBackArea = new Rectangle[imageNum];
    	}
	    metrics = getFontMetrics(font);
	    String s = getParameter("titles");
	    if (s != null) {
	        StringTokenizer st1 = new StringTokenizer(s, ",");
	        while (st1.hasMoreTokens()) {
	            String t = st1.nextToken();
	            if (!t.equals("-")) {
    	            StringTokenizer st2 = new StringTokenizer(t, "|");
    	            if (st2.hasMoreTokens()) {
    	                title[count] = st2.nextToken();
    	                int x = PADX;
    	                int y = PADY + metrics.getAscent();
    	                int width = metrics.stringWidth(title[count]);
    	                int height = metrics.getAscent();
    	                if (st2.hasMoreTokens()) {
    	                    String u = st2.nextToken();
            			    if ("n".equals(u)) {
        			            x = (mySize.width - width) / 2;
        			            y = PADY + height;
            			    } else if ("ne".equals(u)) {
        			            x = mySize.width - PADX - width;
        			            y = PADY + height;
            			    } else if ("c".equals(u)) {
        			            x = (mySize.width - width) / 2;
        			            y = (mySize.height + height) / 2;
            			    } else if ("sw".equals(u)) {
        			            x = PADX;
        			            y = mySize.height - PADY;
            			    } else if ("s".equals(u)) {
        			            x = (mySize.width - width) / 2;
        			            y = mySize.height - PADY;
            			    } else if ("se".equals(u)) {
        			            x = mySize.width - PADX - width;
        			            y = mySize.height - PADY;
            			    }
    	                }
    	                titlePos[count] = new Point(x, y);
    	                if (fontBackColor != null) {
        	                titleBackArea[count] = new Rectangle(x - 5, y - height - 5,
        	                    width + 10, height + 10);
        	            }
        	        }
	            }
	            count++;
	        }
	    }
	}
	//-------------------------------------------------------------
	public void start() {
		for (int i = 0; i < images.length; i++) {
			try {
				URL imgUrl = new URL(imageFile[i]);
				images[i] = getImage(imgUrl);
			} catch (MalformedURLException e) {
				images[i] = getImage(getDocumentBase(), imageDir + "/" + imageFile[i]);
			}
		}
		offImage = createImage(mySize.width, mySize.height);
		offScreen = offImage.getGraphics();
		onScreen = getGraphics();
		mosaicImage = createImage(mySize.width, mySize.height);
		tracker = new MediaTracker(this);
		for (int i = 0; i < images.length; i++) {
			tracker.addImage(images[i], i);
		}
		makeFadeImages();
		if (kicker == null) {
			kicker = new Thread(this);
			kicker.start();
		}
	}
	//-------------------------------------------------------------
	void makeFadeImages() {
		int[][] pix = new int[FADEMAX][FADEWID*FADEWID];
		for (int i = 0; i < FADEMAX; i++) {
			for (int y = 0; y < FADEWID; y++) {
				for (int x = 0; x < FADEWID; x++) {
					pix[i][x+y*FADEWID] = (0xff*(i+1)/FADEMAX)<<24 | (fadeColor.getRGB() & 0x00ffffff);
				}
			}
			MemoryImageSource mis = new MemoryImageSource(FADEWID, FADEWID, pix[i], 0, FADEWID);
			fadeImage[i] = createImage(mis);
		}
	}
	//-------------------------------------------------------------
	public void stop() {
		if (kicker != null) {
			kicker.stop();
		}
		kicker = null;
	}
	//-------------------------------------------------------------
	public void paint(Graphics g) {
		g.drawImage(offImage, 0, 0, null);
	}
	//-------------------------------------------------------------
	public void update(Graphics g) {
		paint(g);
	}
	//-------------------------------------------------------------
	void drawMessage(String message) {
		offScreen.setColor(bgColor);
		offScreen.fillRect(0, 0, mySize.width, mySize.height);
		offScreen.setColor(Color.cyan);
		offScreen.drawString(message, 10, 20);
	}
	//-------------------------------------------------------------
	void scrollImage(Image fore, Image back, int dx, int dy) {
		int fx = (mySize.width - fore.getWidth(null)) / 2;
		int fy = (mySize.height - fore.getHeight(null)) / 2;
		int bx = (mySize.width - back.getWidth(null)) / 2;
		int by = (mySize.height - back.getHeight(null)) / 2;
		int width = fore.getWidth(null);
		int height = fore.getHeight(null);
		while (fx + width > 0 && fx < mySize.width
				&& fy + height > 0 && fy < mySize.height) {
			fx += dx;
			fy += dy;
			offScreen.setColor(bgColor);
			offScreen.fillRect(0, 0, mySize.width, mySize.height);
			offScreen.drawImage(back, bx, by, null);
			offScreen.drawImage(fore, fx, fy, null);
			onScreen.drawImage(offImage, 0, 0, null);
			try {
				Thread.currentThread().sleep(50);
			} catch (InterruptedException e) {
			}
		}
	}
	//-------------------------------------------------------------
	void slideImage(Image back, Image fore, int dx, int dy) {
	    int fx = 0;
	    int fy = 0;
		int width = fore.getWidth(null);
		int height = fore.getHeight(null);
		int bx = (mySize.width - back.getWidth(null)) / 2;
		int by = (mySize.height - back.getHeight(null)) / 2;
		int endx = (mySize.width - width) / 2;
		int endy = (mySize.height - height) / 2;
		if (dx != 0) {
    	    fx = (dx > 0)?-width:mySize.width;
    	    fy = endy;
    	} else {
    	    fy = (dy > 0)?-height:mySize.height;
    	    fx = endx;
    	}
		while (true) {
		    if (dx != 0) {
    			fx += dx;
    			if ((dx > 0 && fx > endx) || (dx < 0 && fx < endx)) break;
    		} else {
    			fy += dy;
    			if ((dy > 0 && fy > endy) || (dy < 0 && fy < endy)) break;
    		}
			offScreen.setColor(bgColor);
			offScreen.fillRect(0, 0, mySize.width, mySize.height);
			offScreen.drawImage(back, bx, by, null);
			offScreen.drawImage(fore, fx, fy, null);
			onScreen.drawImage(offImage, 0, 0, null);
			try {
				Thread.currentThread().sleep(50);
			} catch (InterruptedException e) {
			}
		}
	}
	//-------------------------------------------------------------
	void tearImage(Image image, int dx, int dy) {
		int w = 0;
		int h = 0;
		int	x1 = (mySize.width - image.getWidth(null)) / 2;
		int	y1 = (mySize.height - image.getHeight(null)) / 2;
		int x2 = x1+image.getWidth(null);
		int y2 = y1+image.getHeight(null);
		while (w < image.getWidth(null) && h < image.getHeight(null)) {
			if (dx > 0) {
				w += dx;
				offScreen.clipRect(x1, 0, w, mySize.height);
			} else if (dy > 0) {
				h += dy;
				offScreen.clipRect(0, y1, mySize.width, h);
			} else if (dx < 0) {
				x2 += dx;
				w -= dx;
				offScreen.clipRect(x2, 0, w, mySize.height);
			} else if (dy < 0) {
				y2 += dy;
				h -= dy;
				offScreen.clipRect(0, y2, mySize.width, h);
			}
			offScreen.drawImage(image, x1, y1, null);
			onScreen.drawImage(offImage, 0, 0, null);
			try {
				Thread.currentThread().sleep(50);
			} catch (InterruptedException e) {
			}
			offScreen.dispose();
			offScreen = offImage.getGraphics();
		}
	}
	//-------------------------------------------------------------
	void tearOpenImage(Image image, int dx, int dy) {
		int x = mySize.width / 2;
		int y = mySize.height / 2;
		int w = 0;
		int h = 0;
		int nx = (mySize.width - image.getWidth(null)) / 2;
		int ny = (mySize.height - image.getHeight(null)) / 2;
		while (x > nx && y > ny) {
			if (dx > 0) {
				x -= dx;
				w += dx * 2;
				offScreen.clipRect(x, 0, w, mySize.height);
			} else if (dy > 0) {
				y -= dy;
				h += dy * 2;
				offScreen.clipRect(0, y, mySize.width, h);
			}
			offScreen.drawImage(image, nx, ny, null);
			onScreen.drawImage(offImage, 0, 0, null);
			try {
				Thread.currentThread().sleep(50);
			} catch (InterruptedException e) {
			}
			offScreen.dispose();
			offScreen = offImage.getGraphics();
		}
	}
	//-------------------------------------------------------------
	void shrinkImage(Image current, Image next, int dx, int dy) {
		int w = next.getWidth(null);
		int h = next.getHeight(null);
		int nx = (mySize.width - w) / 2;
		int ny = (mySize.height - h) / 2;
		int cx = (mySize.width - current.getWidth(null)) / 2;
		int cy = (mySize.height - current.getHeight(null)) / 2;
		int x = nx;
		int y = ny;
		while (w > 0 && h > 0) {
			offScreen.drawImage(current, cx, cy, null);
			if (dx != 0) {
    		    offScreen.clipRect(0, 0, x, mySize.height);
    		} else {
    		    offScreen.clipRect(0, 0, mySize.width, y);
    		}
		    offScreen.drawImage(next, nx, ny, null);
		    offScreen.dispose();
			offScreen = offImage.getGraphics();
			if (dx != 0) {
			    offScreen.clipRect(x+w, 0, mySize.width-(x+w), mySize.height);
			} else {
    			offScreen.clipRect(0, y+h, mySize.width, mySize.height-(y+h));
    		}
			offScreen.drawImage(next, nx, ny, null);
			onScreen.drawImage(offImage, 0, 0, null);
			try {
				Thread.currentThread().sleep(50);
			} catch (InterruptedException e) {
			}
			if (dx > 0) {
				x += dx;
				w -= dx * 2;
			} else if (dy > 0) {
				y += dy;
				h -= dy * 2;
			}
			offScreen.dispose();
			offScreen = offImage.getGraphics();
		}
	}
	//-------------------------------------------------------------
	void openImage(Image next, int speed) {
		double dx, dy;
		int nw = next.getWidth(null);
		int nh = next.getHeight(null);
		int nx = (mySize.width - nw) / 2;
		int ny = (mySize.height - nh) / 2;
		if (nw < nh) {
			dy = (double)speed;
			dx = (double)speed * nw / nh;
		} else {
			dx = (double)speed;
			dy = (double)speed * nh / nw;
		}
		double w = 0;
		double h = 0;
		double x = mySize.width / 2;
		double y = mySize.height / 2;
		while (x > nx || y > ny) {
			x -= dx;
			w += dx * 2;
			y -= dy;
			h += dy * 2;
			offScreen.clipRect((int)x, (int)y, (int)w, (int)h);
			offScreen.drawImage(next, nx, ny, null);
			onScreen.drawImage(offImage, 0, 0, null);
			try {
				Thread.currentThread().sleep(50);
			} catch (InterruptedException e) {
			}
			offScreen.dispose();
			offScreen = offImage.getGraphics();
		}
	}
	//-------------------------------------------------------------
	void closeImage(Image current, Image next, int speed) {
		double dx, dy;
		double w = current.getWidth(null);
		double h = current.getHeight(null);
		if (w < h) {
			dy = (double)speed;
			dx = (double)speed * w / h;
		} else {
			dx = (double)speed;
			dy = (double)speed * h / w;
		}
		int cx = (mySize.width - (int)w) / 2;
		int cy = (mySize.height - (int)h) / 2;
		double x = cx;
		double y = cy;
		int nx = (mySize.width - next.getWidth(null)) / 2;
		int ny = (mySize.height - next.getHeight(null)) / 2;
		while (w > 0 && h > 0) {
			x += dx;
			w -= dx * 2;
			y += dy;
			h -= dy * 2;
			offScreen.drawImage(next, nx, ny, null);
			offScreen.clipRect((int)x, (int)y, (int)w, (int)h);
			offScreen.drawImage(current, cx, cy, null);
			onScreen.drawImage(offImage, 0, 0, null);
			try {
				Thread.currentThread().sleep(50);
			} catch (InterruptedException e) {
			}
			offScreen.dispose();
			offScreen = offImage.getGraphics();
		}
	}
	//-------------------------------------------------------------
	void fadeImage(Image current, Image next) {
		int x = (mySize.width - current.getWidth(null)) / 2;
		int y = (mySize.height - current.getHeight(null)) / 2;
		for (int i = 0; i < FADEMAX; i++) {
			offScreen.setColor(bgColor);
			offScreen.fillRect(0, 0, mySize.width, mySize.height);
			offScreen.drawImage(current, x, y, null);
			for (int fy = 0; fy < mySize.height; fy += FADEWID) {
				for (int fx = 0; fx < mySize.width; fx += FADEWID) {
					offScreen.drawImage(fadeImage[i], fx, fy, null);
				}
			}
			onScreen.drawImage(offImage, 0, 0, null);
			try {
				Thread.currentThread().sleep(fadeTime);
			} catch (InterruptedException e) {
			}
		}
		x = (mySize.width - next.getWidth(null)) / 2;
		y = (mySize.height - next.getHeight(null)) / 2;
		for (int i = FADEMAX-1; i >= 0; i--) {
			offScreen.setColor(bgColor);
			offScreen.fillRect(0, 0, mySize.width, mySize.height);
			offScreen.drawImage(next, x, y, null);
			for (int fy = 0; fy < mySize.height; fy += FADEWID) {
				for (int fx = 0; fx < mySize.width; fx += FADEWID) {
					offScreen.drawImage(fadeImage[i], fx, fy, null);
				}
			}
			onScreen.drawImage(offImage, 0, 0, null);
			try {
				Thread.currentThread().sleep(fadeTime);
			} catch (InterruptedException e) {
			}
		}
	}
	//-------------------------------------------------------------
	void mosaicImage(Image image) {
		int x = 0;
		int y = 0;
		int n = 0;
		int line = mySize.height/mosaicHeight;
		if (line*mosaicHeight < mySize.height) line++;
		int column = mySize.width/mosaicWidth;
		if (column*mosaicWidth < mySize.width) column++;
		Point[] p = new Point[line*column];
		for (int i = 0; i < p.length; i++) {
			p[i] = new Point(i/line, i%line);
		}
		for (int i = 0; i < p.length; i++) {
			int r = (int)(rand.nextFloat()*line*column);
			Point tmp = p[i];
			p[i] = p[r];
			p[r] = tmp;
		}
		Graphics g = mosaicImage.getGraphics();
		g.setColor(bgColor);
		g.fillRect(0, 0, mySize.width, mySize.height);
		g.drawImage(image, (mySize.width-image.getWidth(null))/2, (mySize.height-image.getHeight(null))/2, null);
		g.dispose();
		while (n < line*column) {
			for (int i = 0; i < mosaicSpeed; i++) {
				x = p[n].x;
				y = p[n].y;
				offScreen.clipRect(x*mosaicWidth, y*mosaicHeight, mosaicWidth, mosaicHeight);
				offScreen.drawImage(mosaicImage, 0, 0, null);
				offScreen.dispose();
				offScreen = offImage.getGraphics();
				if (++n >= line*column) break;
			}
			onScreen.drawImage(offImage, 0, 0, null);
			try {
				Thread.currentThread().sleep(50);
			} catch (InterruptedException e) {
			}
		}
	}
	//-------------------------------------------------------------
	private boolean loadImage(int n) {
		drawMessage("Loading image... " + imageFile[n]);
		repaint();
		try {
			tracker.waitForID(n);
		} catch (InterruptedException e) {
			e.printStackTrace();
			return false;
		}
		if (tracker.isErrorID(n)) {
			drawMessage("Error loading image " + imageFile[n]);
			repaint();
			return false;
		}
		return true;
	}
	//-------------------------------------------------------------
	public void run() {
		if (randomOrder) {
			current = (int)(rand.nextFloat()*images.length);
		}
		if (randomEffect) {
			change[current] = (int)(rand.nextFloat()*EFFECTNUM+1);
			if (change[current] != FADE && change[current] != MOSAIC
			    && change[current] != OPEN && change[current] != CLOSE) {
				change[current] = (int)(rand.nextFloat()*EFFECTNUM+1);
			}
		}
		if (drawWhileLoading) {
			if (loadImage(current) == false) {
				return;
			}
		} else {
			for (int i = 0; i < images.length; i++) {
				if (loadImage(i) == false) {
					return;
				}
			}
		}
		drawMessage("");
		
		while (true) {
			long stime = System.currentTimeMillis();
			int next;
			int x = (mySize.width - images[current].getWidth(null)) / 2;
			int y = (mySize.height - images[current].getHeight(null)) / 2;
			offScreen.setColor(bgColor);
			offScreen.fillRect(0, 0, mySize.width, mySize.height);
			offScreen.drawImage(images[current], x, y, null);
			if (title[current] != null) {
			    offScreen.setFont(font);
			    if (fontBackColor != null) {
			        offScreen.setColor(fontBackColor);
			        offScreen.fillRect(titleBackArea[current].x, titleBackArea[current].y,
			            titleBackArea[current].width, titleBackArea[current].height);
			    }
			    if (fontLineColor != null) {
			        offScreen.setColor(fontLineColor);
			        int len = metrics.stringWidth(title[current]);
			        offScreen.fillRect(titlePos[current].x, titlePos[current].y, len, 2);
			    }
			    if (fontShadowColor != null) {
			        offScreen.setColor(fontShadowColor);
			        offScreen.drawString(title[current], titlePos[current].x + 1, titlePos[current].y + 1);
			    }
			    offScreen.setColor(fontColor);
		        offScreen.drawString(title[current], titlePos[current].x, titlePos[current].y);
			}
			onScreen.drawImage(offImage, 0, 0, null);
			if (target != null) {
    			try {
            		TextChanger textChanger = (TextChanger)(context.getApplet(target));
        			if (textChanger != null) {
        			    textChanger.changeText(current);
        			}
            	} catch (Exception e) {
            	    e.printStackTrace();
        	    }
        	}
        	if (autoLink && !linked && url[current] != null) {
        	    linked = true;
    		    if (frame != null) context.showDocument(url[current], frame);
    		    else context.showDocument(url[current]);
        	}
			if (randomOrder) {
				do {
					next = (int)(rand.nextFloat()*images.length);
				} while (next == current);
			} else {
				next = current + 1;
				if (next >= images.length) {
					next = 0;
				}
			}
			if (randomEffect) {
				change[next] = (int)(rand.nextFloat()*EFFECTNUM+1);
			}
			try {
				tracker.waitForID(next);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			if (tracker.isErrorID(next)) {
				drawMessage("Error loading image " + imageFile[next]);
				repaint();
				return;
			}
 			try {
				if (time[current] == 0) {
					Thread.currentThread().suspend();
				} else {
					long sleepTime = time[current]-(System.currentTimeMillis()-stime);
					if (sleepTime > 0) {
						Thread.currentThread().sleep(sleepTime);
					}
				}
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		    if (title[current] != null) {
    			offScreen.drawImage(images[current], x, y, null);
    			onScreen.drawImage(offImage, 0, 0, null);
    		}
			switch (change[current]) {
			case NONE :
				break;
			case SCROLLUP :
				scrollImage(images[current], images[next], 0, -scrollSpeed);
				break;
			case SCROLLDOWN :
				scrollImage(images[current], images[next], 0, scrollSpeed);
				break;
			case SCROLLRIGHT :
				scrollImage(images[current], images[next], scrollSpeed, 0);
				break;
			case SCROLLLEFT :
				scrollImage(images[current], images[next], -scrollSpeed, 0);
				break;
			case TEARVERTICAL :
				tearOpenImage(images[next], 0, changeSpeed);
				break;
			case TEARHORIZONTAL :
				tearOpenImage(images[next], changeSpeed, 0);
				break;
			case OPEN :
				openImage(images[next], changeSpeed);
				break;
			case CLOSE :
				closeImage(images[current], images[next], changeSpeed);
				break;
			case FADE :
				fadeImage(images[current], images[next]);
				break;
			case MOSAIC :
				mosaicImage(images[next]);
				break;
			case TEARUP :
				tearImage(images[next], 0, -changeSpeed);
				break;
			case TEARDOWN :
				tearImage(images[next], 0, changeSpeed);
				break;
			case TEARRIGHT :
				tearImage(images[next], changeSpeed, 0);
				break;
			case TEARLEFT :
				tearImage(images[next], -changeSpeed, 0);
				break;
			case SLIDEUP:
				slideImage(images[current], images[next], 0, -scrollSpeed);
				break;
			case SLIDEDOWN:
				slideImage(images[current], images[next], 0, scrollSpeed);
				break;
			case SLIDERIGHT:
				slideImage(images[current], images[next], scrollSpeed, 0);
				break;
			case SLIDELEFT:
				slideImage(images[current], images[next], -scrollSpeed, 0);
				break;
			case SHRINKVERTICAL:
			    shrinkImage(images[current], images[next], 0, changeSpeed);
			    break;
			case SHRINKHORIZONTAL:
			    shrinkImage(images[current], images[next], changeSpeed, 0);
			    break;
			}
			current = next;
			if (cursorIn) showURL(url[current]);
			linked = false;
		}
	}
	//-------------------------------------------------------------
	private Frame getFrame() {
		Component parent = getParent();
		while (parent != null && !(parent instanceof Frame)) {
			parent = parent.getParent();
		}
		return (Frame)parent;
	}
	//-------------------------------------------------------------
	private void showURL(URL u) {
	    if (u == null) {
	        context.showStatus("");
	        getFrame().setCursor(Frame.DEFAULT_CURSOR);
	    } else {
    	    context.showStatus(u.toString());
	        getFrame().setCursor(Frame.HAND_CURSOR);
    	}
	}
	//-------------------------------------------------------------
	public boolean mouseDown(Event evt, int x, int y) {
		if (url[current] != null) {
		    if (frame != null) context.showDocument(url[current], frame);
		    else context.showDocument(url[current]);
		} else {
			if (kicker != null) {
				kicker.resume();
			}
		}
		return true;
	}
	//-------------------------------------------------------------
	public boolean mouseEnter(Event evt, int x, int y) {
	    cursorIn = true;
	    showURL(url[current]);
		return true;
	}
	//-------------------------------------------------------------
	public boolean mouseExit(Event evt, int x, int y) {
	    cursorIn = false;
	    showURL(null);
		return true;
	}
}

/////////////////////////////////////////////////////////////////////////////
// TextChanger.java
// 
import java.applet.*;
import java.awt.*;
import java.util.*;
//---------------------------------------------------------------------------
public class TextChanger extends Applet 
{
    private TextArea area;
    private String[] texts;
    private Color bgColor;
    private Color fgColor;
    //--------------------------------------------------------------
	public void init() {
        setLayout(new BorderLayout());
        area = new TextArea();
        area.setEditable(false);
        String s = getParameter("bgColor");
        if (s != null) bgColor = new Color(Integer.parseInt(s, 16));
        s = getParameter("fgColor");
        if (s != null) fgColor = new Color(Integer.parseInt(s, 16));
        area.setBackground(bgColor);
        area.setForeground(fgColor);
        add("Center", area);
        s = getParameter("texts");
        if (s != null) {
            StringTokenizer st = new StringTokenizer(s, "|");
            texts = new String[st.countTokens()];
            int count = 0;
            while (st.hasMoreTokens()) {
                String t = st.nextToken().trim();
                if (t.equals("-")) {
                    texts[count] = "";
                } else {
                    texts[count] = modifyString(t);
                }
                count++;
            }
        }
    }
    //--------------------------------------------------------------
    private String modifyString(String s) {
        StringBuffer buff = new StringBuffer();
        boolean flag = false;
        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            if (flag) {
                if (c == 'n') {
                    buff.append('\n');
                } else {
                    buff.append(c);
                }
                flag = false;
            } else if (c == '\\' || c == 0xA5) {
                flag = true;
            } else if (c != '\n') {
                buff.append(c);
                flag = false;
            }
        }
        return buff.toString();
    }
    //--------------------------------------------------------------
    public void changeText(int n) {
        if (n < texts.length) {
            area.setText(texts[n]);
        } else {
            area.setText("");
        }
    }
}
	
インターネットスタートページ 鈴木維一郎 石橋三重子
         
               
                   


©2000 kg-group Inc.