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

📄 mtimagesequencetimer.java

📁 这是一个英文版的《Java程序设计与问题解决》现在好多大学都当成教材
💻 JAVA
字号:
/* * Swing version. */import javax.swing.*;import java.awt.*;import java.awt.event.*;/*  * This applet displays several images in a row.  It preloads * the images using MediaTracker, which uses multiple background * threads to download the images.  The program displays a * "Please wait" message until all the images are fully loaded.   * Note that the Swing ImageIcon class uses MediaTracker to * preload images, so you can often use it instead of using * Images and MediaTracker directly. */public class MTImageSequenceTimer extends JApplet                                   implements ActionListener {    MTPanel mtPanel;    static int frameNumber = -1;    int delay;    static boolean frozen = false;    Timer timer;    boolean error;    MediaTracker tracker;    //Invoked only when run as an applet.    public void init() {        //Load the images.        Image images[] = new Image[10];        for (int i = 1; i <= 10; i++) {            images[i-1] = getImage(getCodeBase(), "images/T"+i+".gif");        }        buildUI(getContentPane(), images);        startAnimation();    }    void buildUI(Container container, Image[] dukes) {        tracker = new MediaTracker(this);        for (int i = 1; i <= 10; i++) {            tracker.addImage(dukes[i-1], 0);            error = tracker.isErrorAny();        }        int fps = 10;        //How many milliseconds between frames?        delay = (fps > 0) ? (1000 / fps) : 100;        //Set up a timer that calls this object's action handler.        timer = new Timer(delay, this);        timer.setInitialDelay(0);        timer.setCoalesce(true);        mtPanel = new MTPanel(dukes);        container.add(mtPanel, BorderLayout.CENTER);        mtPanel.addMouseListener(new MouseAdapter() {            public void mousePressed(MouseEvent e) {                if (frozen) {                    frozen = false;                    startAnimation();                } else {                    frozen = true;                    stopAnimation();                }            }       });    }    public void start() {        startAnimation();    }    public void stop() {        stopAnimation();    }    public synchronized void startAnimation() {        if (frozen) {             //Do nothing.  The user has requested that we             //stop changing the image.        } else {            //Start animating!            if (!timer.isRunning()) {                timer.start();            }        }    }    public synchronized void stopAnimation() {        //Stop the animating thread.        if (timer.isRunning()) {            timer.stop();        }    }    public void actionPerformed(ActionEvent e) {        //Start downloading the images. Wait until they're        //loaded before requesting repaints.        try {            tracker.waitForAll();        } catch (InterruptedException exc) {}        //Advance the frame.        frameNumber++;        //Display it.        mtPanel.repaint();    }    class MTPanel extends JPanel {        Image dukesWave[];        public MTPanel(Image[] dukesWave) {            this.dukesWave = dukesWave;        }        //Draw the current frame of animation.        public void paintComponent(Graphics g) {            super.paintComponent(g); //paint the background            int width = getWidth();            int height = getHeight();            //If not all the images are loaded,            //just display a status string.            if (!tracker.checkAll()) {                g.drawString("Please wait...", 0, height/2);                return;            }            //Paint the frame into the image.            g.drawImage(dukesWave[MTImageSequenceTimer.frameNumber%10],                        0, 0, this);        }    }    //Invoked only when run as an application.    public static void main(String[] args) {          Image[] waving = new Image[10];        for (int i = 1; i <= 10; i++) {            waving[i-1] =                Toolkit.getDefaultToolkit().getImage("images/T"+i+".gif");        }        JFrame f = new JFrame("MTImageSequenceTimer");        f.addWindowListener(new WindowAdapter() {            public void windowClosing(WindowEvent e) {                System.exit(0);            }        });        MTImageSequenceTimer controller = new MTImageSequenceTimer();        controller.buildUI(f.getContentPane(), waving);        controller.startAnimation();        f.setSize(new Dimension(75, 100));        f.setVisible(true);    }       }

⌨️ 快捷键说明

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