home *** CD-ROM | disk | FTP | other *** search
Java Source | 2000-12-07 | 6.6 KB | 314 lines |
- /*
- * 00:01:00 08/12/00
- *
- * Calembour.java - Advertisment for web pages
- * Copyright (C) 2000 Romain Guy
- * guy.romain@bigfoot.com
- * www.jext.org
- *
- */
-
- import java.applet.Applet;
-
- import java.awt.Color;
- import java.awt.Cursor;
- import java.awt.Image;
- import java.awt.Graphics;
- import java.awt.MediaTracker;
-
- import java.awt.event.MouseEvent;
- import java.awt.event.MouseAdapter;
- import java.awt.event.MouseMotionAdapter;
-
- import java.net.URL;
- import java.net.MalformedURLException;
-
- import java.util.Vector;
-
- public class Calembour extends Applet implements Runnable
- {
- private Graphics off;
- private Image offImg;
-
- private URL myURL;
- private Color backColor;
-
- private Thread runner;
- private MediaTracker tracker;
-
- private int bannerIndex = -1;
- private Banner currentBanner;
- private Vector banners = new Vector();
-
- private long start = 0;
- private boolean isError;
-
- /**
- * In the <code>init()</code> method, we simply add a
- * <code>MouseMotionListener</code>, create a
- * <code>MediaTracker</code> and then get the parameters.
- */
-
- public void init()
- {
- // image for double bffering
- offImg = createImage(size().width, size().height);
-
- // create a Graphics object from the image
- off = offImg.getGraphics();
-
- Color backColor = Color.white;
- String data;
- tracker = new MediaTracker(this);
-
- // ---- Background color ----
-
- data = getParameter("bgcolor");
- if (data != null)
- {
- try
- {
- backColor = Color.decode(data);
- } catch (NumberFormatException nfe) {
- backColor = Color.white;
- }
- }
- setBackground(backColor);
-
- data = null;
-
- for (int i = 0; ; i++)
- {
- data = getParameter("banner" + i);
- if (data == null)
- break;
- else
- {
- Banner _banner = new Banner(data);
-
- data = getParameter("banner" + i + ".interval");
- int interval;
- if (data == null)
- interval = 7000;
-
- try
- {
- interval = Integer.parseInt(data);
- } catch (Exception e) {
- interval = 7000;
- }
-
- _banner.setInterval(interval);
-
- String link = getParameter("banner" + i + ".link");
- if (link != null)
- {
- String target = getParameter("banner" + i + ".target");
- if (target == null)
- target = "_blank";
- _banner.setLink(link, target);
- }
-
- data = getParameter("banner" + i + ".image");
- if (data == null)
- {
- _banner.setName("banner" + i + ": missing parameter: image URL");
- } else {
- Image img = getImage(getDocumentBase(), data);
- _banner.setImage(img);
- tracker.addImage(img, i);
- }
-
- banners.addElement(_banner);
- }
- }
-
- if (banners.size() == 0)
- {
- getAppletContext().showStatus("Error: no banner specified");
- return;
- } else {
- setCurrentBanner();
- }
-
- addMouseMotionListener(new MouseMotionAdapter()
- {
- public void mouseMoved(MouseEvent evt)
- {
- getAppletContext().showStatus(currentBanner.getName());
- }
- });
-
- addMouseListener(new MouseAdapter()
- {
- public void mouseReleased(MouseEvent evt)
- {
- getAppletContext().showDocument(myURL, currentBanner.getTarget());
- }
- });
-
- off.setColor(getBackground());
- off.fillRect(0, 0, size().width, size().height);
- getGraphics().drawImage(offImg, 0, 0, this);
- }
-
- private void setCurrentBanner()
- {
- bannerIndex++;
- if (bannerIndex == banners.size())
- bannerIndex = 0;
-
- currentBanner = (Banner) banners.elementAt(bannerIndex);
- currentBanner.init();
-
- try
- {
- myURL = new URL(getDocumentBase(), currentBanner.getLink());
- } catch (MalformedURLException mue) { }
-
- isError = false;
- start = System.currentTimeMillis();
- }
-
- /**
- * This simply starts the main iOb's Thread.
- */
-
- public void start()
- {
- if (runner == null)
- {
- runner = new Thread(this);
- runner.start();
- }
- }
-
- /**
- * Here we kill the Thread.
- */
-
- public void stop()
- {
- runner.interrupt();
- runner = null;
- }
-
- /**
- * In this method, we repaint until the picture has been
- * fully loaded.
- */
-
- public void run()
- {
- Thread me = Thread.currentThread();
- while (runner == me)
- {
- if (tracker.statusID(bannerIndex, false) != MediaTracker.COMPLETE && !isError)
- repaint();
- if (System.currentTimeMillis() - start >= currentBanner.getInterval())
- {
- setCurrentBanner();
- repaint();
- }
-
- Thread.yield();
- }
- }
-
- public void update(Graphics g)
- {
- paint(g);
- }
-
- public void paint(Graphics g)
- {
- if (tracker.isErrorID(bannerIndex))
- {
- off.setColor(Color.black);
- off.drawRect(9, 9, 21, 21);
- off.setColor(Color.red);
- off.setFont(new java.awt.Font("monospaced", java.awt.Font.PLAIN, 12));
- off.drawString("Error loading image", 35, 24);
- off.setFont(new java.awt.Font("monospaced", java.awt.Font.PLAIN, 21));
- off.drawString("X", 13, 27);
- isError = true;
- } else
- currentBanner.paint(off);
-
- g.drawImage(offImg, 0, 0, this);
- }
-
- public String getAppletInfo()
- {
- return("Calembour (C)2000 Romain Guy\nguy.romain@bigfoot.com\nwww.jext.org");
- }
-
- // the class which holds the banners
-
- class Banner
- {
- private Image image;
- private int interval;
- private String name, link, target;
-
- Banner(String name)
- {
- this.name = name;
- }
-
- public void init()
- {
- setCursor(Cursor.getPredefinedCursor(link == null ?
- Cursor.DEFAULT_CURSOR : Cursor.HAND_CURSOR));
- }
-
- public void setInterval(int interval)
- {
- this.interval = interval;
- }
-
- public int getInterval()
- {
- return interval;
- }
-
- public void setLink(String link, String target)
- {
- this.link = link;
- this.target = target;
- }
-
- public String getLink()
- {
- return link;
- }
-
- public String getTarget()
- {
- return target;
- }
-
- public void setImage(Image image)
- {
- this.image = image;
- }
-
- public void setName(String name)
- {
- this.name = name;
- }
-
- public String getName()
- {
- return name;
- }
-
- public void paint(Graphics g)
- {
- g.drawImage(image, 0, 0, Calembour.this);
- }
- }
- }
-
- // End of Calembour.java
-