Java Applet线程动画

AZT

我经历了一些代码Java小程序和动画,我编写了以下代码:

import java.applet.*;
import java.awt.*;

/*<applet code="AppletDemo" width = 200 height = 100></applet>
*/

public class AppletDemo extends Applet implements Runnable
{
    String msg = "Text Animating from right to left...";
    Thread t = null;
    int state;
    boolean stopFlag;
    int msgX = 200;
    String s;
    boolean diff;

    public void init()
    {
        setBackground(Color.cyan);
        setForeground(Color.black);
    }
    public void start()
    {
        t = new Thread(this);
        stopFlag = false;
        t.start();
        s = "abc";
         diff = s.equalsIgnoreCase("abc");
    }

    public void run()
    {
        while (true)
        {
            try{
            if(msgX>=-150)
                msgX--;
            else
                msgX =200;

            Thread.sleep(10);
            repaint();
               }
               catch(Exception e)
               {}
        }
    }
    public void paint(Graphics g)
    {
        g.drawString(msg,msgX,20);
        showStatus(diff+"Text at "+msgX+",20");
    }

}

发生的是,当我放入Thread.sleep(100)时,它可以正常工作,但是当我尝试为Thread.sleep(10)进行更快的动画处理时,它开始闪烁,我无法理解发生了什么事,任何人都可以帮忙。

布拉吉
  • 不要直接在顶层容器上涂漆。用于JPanel在其上绘画。
  • 不要使用Thread.sleep()最好将SwingTimer用于动画。
  • 自定义绘画的替代paintComponent()方法JPanel
  • 不要忘了调用super.paintComponent()内部重写paintComponent方法。

而不是无限循环,请尝试使用Swing Timer

请看看如何使用Swing计时器

样例代码:

import java.applet.Applet;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JPanel;
import javax.swing.Timer;

/*
 * <applet code="AppletDemo" width = 200 height = 100></applet>
 */

public class AppletDemo extends Applet {
    String msg = "Text Animating from right to left...";
    int state;
    boolean stopFlag;
    int msgX = 200;
    String s;
    boolean diff;
    JPanel panel;

    public void init() {
        setBackground(Color.cyan);
        setForeground(Color.black);
        panel = new JPanel() {
            @Override
            public void paintComponent(Graphics g) {
                super.paintComponents(g);
                g.drawString(msg, msgX, 20);
                showStatus(diff + "Text at " + msgX + ",20");
            }

            @Override
            public Dimension getPreferredSize() {
                return new Dimension(200, 40);
            }
        };
        add(panel);

        int delay = 10; // milliseconds
        ActionListener taskPerformer = new ActionListener() {
            public void actionPerformed(ActionEvent evt) {
                if (msgX >= -150)
                    msgX--;
                else
                    msgX = 200;
                repaint();
            }
        };
        Timer timer = new Timer(delay, taskPerformer);
        timer.setRepeats(true);
        timer.start();
    }

}

在此处输入图片说明

在此处找到示例代码

在此处输入图片说明

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章