请问为什么paint执行两次 20

继承了Frame类重写了paint()方法,执行结果为什么会打印两行“???”importjava.awt.Color;importjava.awt.Frame;impo... 继承了Frame类重写了paint()方法,执行结果为什么会打印两行“???”

import java.awt.Color;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class TestPaint extends Frame {

public void paint(Graphics g) {
g.setColor(Color.red);
g.fillOval(30, 30, 20, 20);
System.out.println("?????????????????");
}

public static void main(String[] args) {
new TestPaint().launch();
}

public void launch(){

this.setBounds(5, 5, 150, 160);
this.setVisible(true);
this.addWindowListener(new WindowAdapter(){

public void windowClosing(WindowEvent e) {
System.exit(0);
}

});
}

}
经过我自己测试setBounds()大小设成(5,5,150,150)就只会打印一次“???”
实在不懂什么原理
展开
 我来答
喵不语__
2016-07-19 · TA获得超过2.5万个赞
知道大有可为答主
回答量:3281
采纳率:75%
帮助的人:645万
展开全部
当一个应用程序窗口第一次显示在屏幕上时,或者当它改变大小或暴露在屏幕上时,窗口就会重绘自已
setSize();
setVisible(true);
这两个方法导致的,具体你可以看一看JFrame的代码
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式