paint()动画问题

liaomingxue 2009-10-22 11:14:00
一般地,在Component中绘制动画,是重载paint(g)方法,然后在自己的线程中更新动画内容后再调用repaint(),但下面的情况就有些特殊:

(1)由于设计的需要,没有将Component对象甚至graphics暴露给客户代码,因此也就无法调用repaint()
(2)由于性能的原因,动画更新是非常少量的、短暂的,如果总是在一个线程中定时调度是不够恰当的

因此,我尝试了下面的代码,但是不成功:

class MyComponent extends JComponent
{
MyObject myObject;
public void paint(Graphics g)
{
myObject.draw(g);
}
}
class MyObject implements Runnable
{
Graphics g;
boolean first=true;
public void draw(Graphics g)
{
this.g=g;
if(first)
{
new Thread(this).start();
first=false;// Only one thread generated for one object
}
}

public void run()
{
for(i=0;i<100;i++)
{
g.draw***();
sleep a while;
}
}
}

下面的代码是可以完成动画的:
main()
{
// init myComponent,myObject
myObject.draw(myComponent.getGraphics());
}
class MyComponent extends JComponent
{
MyObject myObject;
public void paint(Graphics g)
{
//myObject.draw(g);
}
}
class MyObject implements Runnable
{
Graphics g;
boolean first=true;
public void draw(Graphics g)
{
this.g=g;
if(first)
{
new Thread(this).start();
first=false;// Only one thread generated for one object
}
}

public void run()
{
for(i=0;i<100;i++)
{
g.draw***();
sleep a while;
}
}
}
...全文
66 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
liaomingxue 2009-10-26
  • 打赏
  • 举报
回复
按照sun的说法,渲染的语句应该在paint()方法的scope管辖范围之类,采用与paint()独立的线程进行渲染确实有些违反常规
config_man 2009-10-22
  • 打赏
  • 举报
回复
...

62,612

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧