由于某种原因,paint()被调用两次

时间:2014-04-13 08:37:52

标签: java applet paint

这是我的代码:

public class Circles extends JApplet{
public void paint(Graphics g)      {          

    Scanner in = new Scanner(System.in);
    Random rand = new Random();

    int position = rand.nextInt(200);

    System.out.println(position);            
   }
}

,输出结果为:

  

199

     

152

发生的事情是在打印出“位置”变量之后,它会跳回并重新开始。我无法弄清楚为什么会这样做。

1 个答案:

答案 0 :(得分:4)

正如MadProgrammer所说,你正在尝试绘制一个JApplet,它不仅没有绘制方法,而且是一个顶级容器,如JFrame和JDialog。您不想绘制到顶级容器。将它放在JPanel或某个较低级别的容器中,允许您覆盖paintComponent方法。

你不想把它放在你的paint方法中。另外,如果你正在使用Swing(你是,那就是名字前面带有J的那个),请使用paintComponent方法。

并确保使用super.paintComponent(g);作为paintComponent方法的第一行调用paintComponent的原始父方法。

所以它看起来像:

public void paintComponent(Graphics g) {
    super.paintComponent(g);
    //anything else you want goes here
    //don't get in the habit of creating Objects in here
    //and don't do anything that's not event-driven
}

除了在重写的paintComponent方法中绘制东西之外,不要放任何东西。你永远不应该将用户输入放入其中并避免创建对象,因为不仅可能有更好的方法来创建对象,创建对象可能会花费大量时间,这对于快速重复调用的方法来说会很糟糕继承。

您无法控制何时重新绘制应用程序。 paintComponent/paint方法是连续调用的,您的设计应该基于此。

将GUI设计为事件驱动的,而不是顺序的。