这方面我不大熟悉
不知道java关于绘图方面有无刷新之类方法?
如果可以刷新的话就好了
要不重置画面,在绘第二次图的时候将背景重置如何?

解决方案 »

  1.   

    你的代码写地不错啊,不过重载paintComponent(Graphics g)的时候有点问题
    那就是调用super.paintComponent(g);必须在paintComponent 中第一句调用它,应为你还要把一些必要的工作交给它。试试吧,我已经测试过了
      

  2.   

    下面是我改过的代码,我发现你帖的代码里面MAIN方法好象帖错了
    import java.awt.*;
    import java.awt.geom.Rectangle2D;
    import java.awt.event.*;
    import javax.swing.*;
    import java.util.*;
    import java.awt.event.*;public class Model extends JFrame implements KeyListener
    {
    DrawLinePane pane = new DrawLinePane();

    public Model() {
    super("This is Cartoon");
    addWindowListener(new WindowAdapter() {
    public void windowClosing(WindowEvent e) {
    dispose();
    System.exit(0);
    }
    });
    setSize(300, 300);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    addKeyListener(this);
    getContentPane().add(pane);
    show(true);
    }
    public void keyTyped(KeyEvent e)
    {
    int i = 1;
    }
      public void keyReleased(KeyEvent e)
      {
        int i =1;
      } 
    public void keyPressed(KeyEvent e)
    {
    if (e.getKeyCode() == KeyEvent.VK_UP){
    pane.up();
    }else if (e.getKeyCode() == KeyEvent.VK_DOWN){
    pane.down();
    }else if (e.getKeyCode() == KeyEvent.VK_LEFT){
    pane.left();
    }else if (e.getKeyCode() == KeyEvent.VK_RIGHT){
    pane.right();
    }
    }
    public static void main(String args[]) {
    System.out.println("Starting Model...");
    new Model();
    }
    }
    class DrawLinePane extends JPanel implements Runnable
    {
    private Thread threadRunner = null;
    double xPos = 0;
    double yPos = 0;
    double xMove = 1;
    double yMove = 1;
    DrawLinePane()
    {
    Thread threadRunner = new Thread(this);
    threadRunner.start();
    }
    public void run()
    {
    while(true)
    {
    xPos += xMove;
    yPos += yMove;
    if(xPos > 300 || xPos < 0 )
    {
    xMove *= -1;
    }
    if(yPos > 300 || yPos < 0)
    {
    yMove *= -1;
    }
    repaint();
    try{
    Thread.sleep(100);
    }catch(Exception e){}
    }
    }
    public void paintComponent(Graphics g)
    {
    super.paintComponent(g);
    Graphics2D g2D = (Graphics2D)g;
    Rectangle2D.Double rect2D = new Rectangle2D.Double (xPos, yPos, 10, 10);
    g2D.setColor(Color.black);
    g2D.fill(rect2D);
    }
    void up()
    {
    yMove -= 2;
    }
    void down()
    {
    yMove +=2;
    }
    void left()
    {
    xMove -= 2;
    }
    void right()
    {
    xMove += 2;
    }
    }