当前位置: 代码迷 >> Java相关 >> 请问如何在使用循环绘制图形时使每个图形的显示之间有一定的延迟时间?
  详细解决方案

请问如何在使用循环绘制图形时使每个图形的显示之间有一定的延迟时间?

热度:101   发布时间:2006-11-11 13:05:53.0
请问如何在使用循环绘制图形时使每个图形的显示之间有一定的延迟时间?

请问如何在使用循环绘制图形时使每个图形的显示之间有一定的延迟时间?
以下面的这个程序为例。多谢。
import java.awt.*;
import java.awt.geom.*;
import javax.swing.*;
import java.awt.event.*;

public class EX12_20 extends JFrame
{
public EX12_20()
{
setSize( 400, 400 );
setVisible( true );
}

public void paint( Graphics g )
{
super.paint( g );
g.setColor( Color.BLUE );
for( int i=0; i<100; i++)
g.drawLine( (int)(Math.random()*400), (int)(Math.random()*400), (int)(Math.random()*400),(int)(Math.random()*400));
repaint();
}

public static void main( String args[] )
{
EX12_20 application = new EX12_20();
application.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
}
}

搜索更多相关的解决方案: 图形时  import  awt  java  绘制  

----------------解决方案--------------------------------------------------------

最好不要有paint方法里调用repaint
最好是把它放到一个线程里面去调用
这样就可以控掉重绘的速度了


----------------解决方案--------------------------------------------------------
不好意思,刚学到这里……
能讲的清楚一些么………
另外,有没有可能在每画一条线的时侯都暂停一定的时间?

[此贴子已经被作者于2006-11-11 14:48:12编辑过]


----------------解决方案--------------------------------------------------------
在线程里面,想怎么控制时间就可以怎么控制时间
你先把线程学好再说吧
----------------解决方案--------------------------------------------------------
Thread.sleep(1000),不过要try catch,一停了窗口也跟着卡
----------------解决方案--------------------------------------------------------
楼上,在线程里1000是一秒,1代表的是一毫秒的,暂停1秒当然会卡了 还有就是最好新建一个线程,而不要暂停主线程,程序做的特别大的时候,主线程的负担太大,所以要新建一个线程!
import java.awt.*;
import java.awt.geom.*;
import javax.swing.*;
import java.awt.event.*;

public class EX12_20 extends JFrame implements Runnable
{
private Thread t;
private boolean Or;
public EX12_20()
{
setSize( 400, 400 );
setVisible( true );
Thread t=new Thread(this);
t.start();
}
public void run()
{
while(Or)
{
try
{
t.sleep(100);
}
catch(Exception ex)
{
System.out.println(ex.getMessage());
}
}
}
public void paint( Graphics g )
{
super.paint( g );
g.setColor( Color.BLUE );
for( int i=0; i<100; i++)
g.drawLine(
(int)(Math.random()*400),
(int)(Math.random()*400),
(int)(Math.random()*400),
(int)(Math.random()*400));
run();
repaint();
}

public static void main( String args[] )
{
EX12_20 application = new EX12_20();
application.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
}
}

----------------解决方案--------------------------------------------------------
了解了。多谢各位不吝赐教。
----------------解决方案--------------------------------------------------------
public void paint( Graphics g )
{
super.paint( g );
g.setColor( Color.BLUE );
for( int i=0; i<100; i++)
g.drawLine(
(int)(Math.random()*400),
(int)(Math.random()*400),
(int)(Math.random()*400),
(int)(Math.random()*400));
run();
repaint();

}
这是什么想法,怎么会这样写程序
这两句明显就是多余的,并且是严重影响性能的
----------------解决方案--------------------------------------------------------
你应该在线程里面去调用repaint,而不要在paint里面调用repaint
----------------解决方案--------------------------------------------------------
改的匆忙,多少有些错误,因为当时学校马上就要停电了!再改一下:
import java.awt.*;
import java.awt.geom.*;
import javax.swing.*;
import java.awt.event.*;

public class EX12_20 extends JFrame implements Runnable
{
private Thread t;
public EX12_20()
{
setSize( 400, 400 );
setVisible( true );
Thread t=new Thread(this);
t.start();
}
public void run()
{
try
{
t.sleep(100);
}
catch(Exception ex)
{
System.out.println(ex.getMessage());
}
repaint();
}
public void paint( Graphics g )
{
super.paint( g );
g.setColor( Color.BLUE );
for( int i=0; i<100; i++)
g.drawLine(
(int)(Math.random()*400),
(int)(Math.random()*400),
(int)(Math.random()*400),
(int)(Math.random()*400));
run();//我不知道版主为什么要去掉这句,我试过了,去掉之后程序只运行100毫秒,版主能做一下答复吗??
}
public static void main( String args[] )
{
EX12_20 application = new EX12_20();
application.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
}
}

----------------解决方案--------------------------------------------------------
  相关解决方案