小程序重绘频率

时间:2015-11-19 04:25:08

标签: java applet

我想使用applet创建一个橡皮筋系列。这是我的代码:

import java.applet.*;
import java.awt.*;
import java.awt.event.*;
import java.util.Vector;

public class RubberLines extends Applet implements MouseMotionListener {
    public void init() {
        addMouseMotionListener(this);
    }    
    public void mouseDragged(MouseEvent e) {
        draw=true;
        X.add(e.getX());
        Y.add(e.getY());
        System.out.println(X.get(0));
        System.out.println("mouse is being dragged at location (" + e.getX() + ", " + e.getY() + ")");
    }    
    public void mouseMoved(MouseEvent e) {
        System.out.println("mouse is being moved at location (" + e.getX() + ", " + e.getY() + ")");
    }     
    public void paint(Graphics g) {
                initX=X.get(0);
                initY=Y.get(0);
                finalX=X.get(X.size()-1);
                finalY=Y.get(Y.size()-1);
                //g.drawLine(0, 0, 100, 100);
                if(draw)
        g.drawLine(initX, initY, finalX, finalY);
        g.setColor(Color.green);
           System.out.println(initX);
           System.out.println(finalY); 

           //repaint();    
    }   
    int initX,initY;
    int finalX,finalY;
    Vector<Integer> X=new Vector<Integer>();
    Vector<Integer> Y=new Vector<Integer>();
    boolean draw=false;    
}

然而,当我拖动鼠标直到我改变applet的大小(这意味着重绘)时,该行没有出现。但是当我添加repaint()时,applet只是不停地重新绘制。

如何理解这个repaint()以及如何解决问题?

1 个答案:

答案 0 :(得分:1)

但是当我添加了repaint()时,applet只是不停地重新绘制。

不要在绘画方法中调用repaint()。

而是将repaint()添加到mouseDragged()方法,因为这是生成事件的地方。

另外,不要忘记在绘画方法中调用super.paint()