栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

尝试用按钮执行head first java第十二章GUI动画

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

尝试用按钮执行head first java第十二章GUI动画

按照书上的方法,动画的for循环在创建框架的方法go()中:

	public void go() {
		//创建框架
		Jframe jf = new Jframe();
		jf.setBounds(0,0,1000,1000);
		jf.setVisible(true);
		jf.setDefaultCloseOperation(Jframe.EXIT_ON_CLOSE);
		jf.setLayout(new BorderLayout());

		//添加画笔
		paint = new MyDraw();
		jf.add(paint);

		//动画循环
		for(int a=0;a<500;a++) {
			x1++;
			y1++;
			paint.repaint();
			
		}
	}

 预期的效果:

尝试使用按钮来开启动画

把动画的for循环加到按钮的actionPerformed方法中后。

//创建按钮的监听方法
public void actionPerformed(ActionEvent event) {
	for(int a=0;a<500;a++) {
		x1++;
		y1++;
		paint.repaint();
		try{
			Thread.sleep(5);
		} catch(Exception ex) {}
	}
}

现象:在监听中循环执行repaint()只有最后一次repaint()显示到frame上。

 

监听方法执行结束后,只有最后一次repaint()被绘制。


产生问题的原因(推测)

注:本人水平有限,以下内容均为个人猜测。若发现错误,恳请指正! 

同一时间只有栈顶的方法在运行。

运行程序时:main()方法调用go()方法

go()//生成frame
 main()

按按钮时:调用监听方法

ationPerformed()//执行动画的循环
go()//此时包含frame的go()方法不在运行
main()

推测:frame的更新需要go()在栈顶。

go()不在栈顶时,frame不更新(推测)。故frame只会在ationPerformed()执行结束时绘制最后图像。

预期解决方案

水平有限,解决方案未知。望各位前辈多多指点!

最后建议同学此书的朋友按照书上的正常操作完成章节学习(0.0)。不要学我乱搞。。。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/351951.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号