繁体   English   中英

Java Applet无法正确响应

[英]Java applet not responding correctly

我正在写一个小型的JAVA小程序。

它会得到一个介于1到6之间的随机数,并将它们打印在APPLET屏幕上。 我想做的是..在屏幕上循环50次并打印各种随机数。 [每次清除前一个号码]。

并在该循环之后..在applet上打印任何1个最终的随机数。

我的问题是:循环。 它正在每个迭代器上打印所有数字,并且屏幕没有清除。 怎么了? 我尝试了许多清除小程序屏幕的方法,例如绘制矩形或使用clearRect()函数。 什么都没用。 这是代码。

import java.applet.Applet;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Graphics;
import java.util.Random;



public class Shapes extends Applet{
    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    Random r = new Random();
    Dimension d = getSize();
    Font f = new Font("TimesRoman", Font.BOLD, 96);
    public void paint(Graphics g)
    {
        for(int m=0;m<=50;m++){     
                int k = Math.abs((r.nextInt()) % 6) + 1;
                g.setFont(f);
                g.setColor(Color.BLACK);
                g.drawString(String.valueOf(k) , 70, 100);  
                g.setColor(Color.WHITE);
                g.drawRect(0, 0, d.width, d.height);
                try{Thread.sleep(70);}catch(Exception e){}
        }



    }

}

问题是在对象创建时,小应用程序还没有大小,因此您必须等待获取小应用程序的尺寸。 例如,在渲染时,如下所示:

public void paint(Graphics g)
{
    d = getSize();
    for(int m=0;m<=50;m++){
        g.clearRect(0, 0, (int) d.getWidth(), (int) d.getHeight());

        int k = Math.abs((r.nextInt()) % 6) + 1;
        g.setFont(f);
        g.setColor(Color.BLACK);
        g.drawString(String.valueOf(k) , 70, 100);
        try{Thread.currentThread().sleep(70);}(Exception e){}
    }
}

请记住, paint(Graphics) 在事件分发线程上,因此休眠它会冻结整个UI。 您需要像这样使用异步重绘:

public void init(){
    Timer t=new Timer(70, new ActionListener(){
        public void actionPerformed(ActionEvent e){repaint();}
    });
    t.setCoalesce(true);
    t.setRepeats(true);
    t.start();
}
public void paint(Graphics g){...}
public void paint(Graphics g)
{
    // ..

应该:

public void paint(Graphics g)
{
    super.paint(g); // VERY IMPORTANT! Draw BG and borders etc.  
    // ..

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM