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

📄 tumbleitem.java

📁 这是一个英文版的《Java程序设计与问题解决》现在好多大学都当成教材
💻 JAVA
字号:
import javax.swing.*;import java.awt.*;import java.awt.event.*;import java.net.*;/** * @author jag * @author mem * @author kwalrath */public class TumbleItem extends JApplet                        implements ActionListener {    int loopslot = -1;  //the current frame number    String dir;         //the directory relative to the codebase                         //from which the images are loaded    Timer timer;        //the timer animating the images    int pause;          //the length of the pause between revs    int offset;         //how much to offset between loops    int off;            //the current offset    int speed;          //animation speed    int nimgs;          //number of images to animate    int width;          //width of the applet's content pane    JComponent contentPane; //the applet's content pane    ImageIcon imgs[];   //the images    int maxWidth;       //width of widest image    boolean finishedLoading = false;    JLabel statusLabel;    static Color[] labelColor = { Color.black, Color.black,                                  Color.black, Color.black,                                  Color.black, Color.white,                                  Color.white, Color.white,                                  Color.white, Color.white };    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();    }    //Update the the loopslot (frame number) and the offset.    //If it's the last frame, restart the timer to get a long    //pause between loops.    public void actionPerformed(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 void start() {        if (finishedLoading && (nimgs > 1)) {            timer.restart();        }    }    public void stop() {        timer.stop();    }    protected URL getURL(URL codeBase, 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 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 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;    }}

⌨️ 快捷键说明

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