TumbleItempublic class TumbleItem extends JApplet implements ActionListener
Fields Summary |
---|
int | loopslot | String | dir | Timer | timer | int | pause | int | offset | int | off | int | speed | int | nimgs | int | width | JComponent | contentPane | ImageIcon[] | imgs | int | maxWidth | boolean | finishedLoading | JLabel | statusLabel | static Color[] | labelColor |
Methods Summary |
---|
public void | actionPerformed(java.awt.event.ActionEvent e)
loopslot++;
if (!finishedLoading) {
int colorIndex = loopslot % labelColor.length;
try {
statusLabel.setForeground(labelColor[colorIndex]);
} catch (NullPointerException exc) {}
return;
}
if (loopslot >= nimgs) {
loopslot = 0;
off += offset;
if (off < 0) {
off = width - maxWidth;
} else if (off + maxWidth > width) {
off = 0;
}
}
contentPane.repaint();
if (loopslot == nimgs - 1) {
timer.restart();
}
| public java.lang.String | getAppletInfo()
return "Title: TumbleItem v1.2, 23 Jul 1997\n"
+ "Author: James Gosling\n"
+ "A simple Item class to play an image loop.";
| public java.lang.String[][] | getParameterInfo()
String[][] info = {
{"img", "string", "the directory containing the images to loop"},
{"pause", "int", "pause between complete loops; default is 3900"},
{"offset", "int", "offset of each image to simulate left (-) or "
+ "right (+) motion; default is 0 (no motion)"},
{"speed", "int", "the speed at which the frames are looped; "
+ "default is 100"},
{"nimgs", "int", "the number of images to be looped; default is 16"},
{"maxwidth", "int", "the maximum width of any image in the loop; "
+ "default is 0"}
};
return info;
| protected java.net.URL | getURL(java.net.URL codeBase, java.lang.String filename)
URL url = null;
try {
url = new URL(codeBase, filename);
} catch (java.net.MalformedURLException e) {
System.out.println("Couldn't create image: badly specified URL");
return null;
}
return url;
| public void | init()
//Get the applet parameters.
String at = getParameter("img");
dir = (at != null) ? at : "images/tumble";
at = getParameter("pause");
pause = (at != null) ? Integer.valueOf(at).intValue() : 1900;
at = getParameter("offset");
offset = (at != null) ? Integer.valueOf(at).intValue() : 0;
at = getParameter("speed");
speed = (at != null) ? (1000 / Integer.valueOf(at).intValue()) : 100;
at = getParameter("nimgs");
nimgs = (at != null) ? Integer.valueOf(at).intValue() : 16;
at = getParameter("maxwidth");
maxWidth = (at != null) ? Integer.valueOf(at).intValue() : 0;
//Animate from right to left if offset is negative.
width = getSize().width;
if (offset < 0) {
off = width - maxWidth;
}
//Custom component to draw the current image
//at a particular offset.
contentPane = new JPanel() {
public void paintComponent(Graphics g) {
super.paintComponent(g);
if (finishedLoading &&
(loopslot > -1) && (loopslot < nimgs)) {
imgs[loopslot].paintIcon(this, g, off, 0);
}
}
};
contentPane.setBackground(Color.white);
setContentPane(contentPane);
//Put a "Loading Images..." label in the middle of
//the content pane. To center the label's text in
//the applet, put it in the center part of a
//BorderLayout-controlled container, and center-align
//the label's text.
statusLabel = new JLabel("Loading Images...",
JLabel.CENTER);
statusLabel.setForeground(labelColor[0]);
contentPane.setLayout(new BorderLayout());
contentPane.add(statusLabel, BorderLayout.CENTER);
//Set up the timer that will perform the animation.
//Don't start it until all the images are loaded.
timer = new Timer(speed, this);
timer.setInitialDelay(pause);
timer.setCoalesce(false);
//Loading the images can take quite a while, so to
//avoid staying in init() (and thus not being able
//to show the "Loading Images..." label, we'll
//load the images in a SwingWorker thread.
imgs = new ImageIcon[nimgs];
timer.start(); //Start the animation.
final SwingWorker worker = new SwingWorker() {
public Object construct() {
URL baseURL = getCodeBase();
String prefix = dir + "/T";
//Images are numbered 1 to nimgs,
//but fill array from 0 to nimgs-1.
for (int i = 0; i < nimgs; i++) {
imgs[i] = new ImageIcon(getURL(baseURL,
prefix + (i+1) + ".gif"));
}
finishedLoading = true;
return imgs;
}
public void finished() {
//Remove the "Loading images" label.
contentPane.removeAll();
contentPane.repaint();
loopslot = -1;
}
};
worker.start();
| public void | start()
if (finishedLoading && (nimgs > 1)) {
timer.restart();
}
| public void | stop()
timer.stop();
|
|