Java小程序线程动画
我已经完成了java小程序和动画的一些代码,我编写了以下代码:Java小程序线程动画,java,swing,applet,Java,Swing,Applet,我已经完成了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 fro
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");
}
}
import java.applet.*;
导入java.awt.*;
/*
*/
公共类AppletDemo扩展Applet实现Runnable
{
String msg=“文本从右向左设置动画…”;
线程t=null;
int状态;
布尔停止标志;
int msgX=200;
字符串s;
布尔差分;
公共void init()
{
挫折背景(颜色:青色);
设置前景(颜色为黑色);
}
公开作废开始()
{
t=新螺纹(本螺纹);
stopFlag=false;
t、 start();
s=“abc”;
差异=s.等信号情况(“abc”);
}
公开募捐
{
while(true)
{
试一试{
如果(msgX>=-150)
msgX--;
其他的
msgX=200;
睡眠(10);
重新油漆();
}
捕获(例外e)
{}
}
}
公共空间涂料(图g)
{
g、 抽绳(味精,味精,20);
showStatus(在“+msgX+”处的diff+”文本,20“);
}
}
现在发生的事情是,当我把线程。睡眠(100),它工作得很好,但当我试图动画速度更快,这是线程。睡眠(10)它开始闪烁,我无法理解正在发生的事情谁能帮我。- 不要直接在顶层容器上涂漆。使用
在其上绘制JPanel
- 不要使用
。最好使用Thread.sleep()
计时器进行动画Swing
- 覆盖
自定义绘制的paintComponent()
方法JPanel
- 不要忘记调用
内部重写的super.paintComponent()
方法paintComponent
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();
}
}
import java.applet.applet;
导入java.awt.Color;
导入java.awt.Dimension;
导入java.awt.Graphics;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入javax.swing.JPanel;
导入javax.swing.Timer;
/*
*
是的,它会闪烁。您必须使用双缓冲的概念来解决这个问题。这意味着要绘制的图像在其在屏幕上绘制之前已被缓冲。它将消除闪烁效果