日期:2014-05-20  浏览次数:20783 次

【40分又来了】利用线程用Graphics画能动的直线?
请问:怎么用线程用Graphics画能动的直线?就是画根线,上动下动。我写的不能用。。。。朋友们教教我怎么做才能动吧。。。
Java code

import javax.swing.*;
import java.awt.*;

public class Window extends JFrame {
    
    public Window()
    {
        super("螃蟹过街");
        setIconImage(Toolkit.getDefaultToolkit().createImage("game/icon.png"));
        setSize(700,400);
        init();
        
        setLocation((Toolkit.getDefaultToolkit().getScreenSize().width-700)/2,(Toolkit.getDefaultToolkit().getScreenSize().height-400)/2);
        setVisible(true);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
    
    public void init()
    {
        Container rongqi=getContentPane();
        
    }
    
    public void paint(Graphics g)
    {
        Color c1=new Color(255,0,0,100);
        g.setColor(c1);
        g.setFont(new Font("",Font.BOLD,30));
        new Load_line(g).start();
        g.drawRect(200, 200, 100, 100);  //画矩形
        g.fillRect(220, 220, 60, 60);    //填充矩形
        
    }
    
    public static void main(String[] args)
    {
        new Window();
    }
}
--------------

import java.awt.Graphics;

public class Load_line extends Thread {
    Graphics q2;
    public Load_line(Graphics q1)
    {
        q2=q1;
    }
    
    public void run()
    {
        for(int i=40;i<300;i+=4)
        {
            q2.drawLine(20, i, 300, i);

            try 
            {
                sleep(300);
            } 
            catch (InterruptedException e) 
            {    
                e.printStackTrace();
            }    
        }
    }

}




------解决方案--------------------
重画使用的是repaint()方法,这个在线程循环中需要调用,因为每次你修改要画的线的数据后都要重画才能看到动态的效果。所以线程也在主类中实现比较方便(extends JFrame implements Runnable)。然后你可以设定一个类变量,run方法中,循环;修改变量值;重画;等待;就OK了。paint方法中画线时用刚才说的那个类变量做参数就行了。
不做其他处理的话,一般动态画面会有闪烁的状况,怎么解决在网上查查吧。