paint()动画问题

liaomingxue none 服务器端工程师  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;
}
}
}
...全文
32 点赞 收藏 2
写回复
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
liaomingxue 2009-10-26
按照sun的说法,渲染的语句应该在paint()方法的scope管辖范围之类,采用与paint()独立的线程进行渲染确实有些违反常规
回复
config_man 2009-10-22
...
回复
发动态
发帖子
Java SE
创建于2007-09-28

6.1w+

社区成员

Java 2 Standard Edition
申请成为版主
社区公告
暂无公告