【问题标题】:how does java paint() method work?java paint() 方法是如何工作的?
【发布时间】:2015-07-02 22:58:01
【问题描述】:

我希望这个小程序可以写 x=0 和 x=10,但它没有:

import java.applet.*;
import java.awt.*;
/*
   <applet code="deney1" width=300 height=100>
   </applet>
   */
public class deney1 extends Applet {
    int x=0; // current position
    public void paint(Graphics g) {
        g.drawString("x="+x, 0,20);
        x+=10;
        g.drawString("x="+x, 0,40);
        x+=1;
    }
}

这是怎么回事?

编辑:建议我的问题可能与这个问题重复:

how is paint() running without being called in the main method?

这篇文章告诉我,paint() 方法无需显式调用即可运行。但这并不能解释 paint() 中语句的执行顺序,而且我无法跟踪打印的 x 值。为什么不是 0 和 10?为什么不是 11 和 22? 为了让事情更清楚一点:

g.drawString("x="+x, 0,20);     //  1
x+=10;                          //  2
g.drawString("x="+x, 0,40);     //  3
x+=1;                           //  4

似乎:2 和 4 在 1 之前执行(x 变为 11)。然后在 3 之前只执行 2(x 变为 21)。

问题 1:为什么 2 和 4 在 1 之前执行?

问题 2:考虑到问题 1 的答案,为什么 4 没有在 3 之前第二次执行?

【问题讨论】:

  • awtswing 以来已过期。 swingJavaFX 以来已过期。这不会回答您的问题,但这是一个很好的建议:永远不要调用它并使用JavaFX
  • 你的代码没问题,问题应该出在其他地方。也许在 main 方法中。
  • Paint 可能会因多种原因被调用,并且我会在快速连续的时间内调用多次。假设文本被打印出来(它为我做了),每次调用 paint 时,x 将增加 11...
  • @WonderWorld 小程序没有 main 方法 ;)

标签: java applet awt


【解决方案1】:

这个问题很受欢迎:

how does paint() work

why is my code executing paintComponent(Graphics page) twice?

Why does the paint method run twice?

paint() in java applet is called twice for no reason

http://www.java-forums.org/awt-swing/58131-help-yet-another-paint-called-twice-thread.html

在第一次运行时,它会打印 x=0 x=10 ,正如我所预料的那样。 (在第一次运行结束时 x 变为 11)。 然后 paint() 方法再次运行(这次从 x 值 11 开始)并打印 x=11 x=21,这是小程序窗口的最终视图。

证明:你可以在 x+=1 之后添加一些代码来暂停程序几秒钟,当你运行程序时,首先你会看到 x=0 x=10,然后它将变为 x=11 x=21 。

带回家的东西: 编写您的 paint() 方法,就好像它会运行 x 次(您无法事先知道 x)。所以不要在里面进行计算。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-13
    • 1970-01-01
    • 2017-10-31
    • 1970-01-01
    • 2017-03-17
    • 2010-10-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多