覆盖JComponent的paint(Graphics g)方法!

解决方案 »

  1.   

    你看以下的代码就明白了
    import java.awt.event.*;
    import java.awt.*;import java.applet.*;import java.util.Vector;public class DrawLine extends Applet {
    DrawPanel panel; public void init() {
    setLayout(new BorderLayout());
    panel = new DrawPanel();
    add("Center",panel);
    } public void destroy() {
    remove(panel);
    } public static void main(String args[]) {
    Frame frame = new Frame("DrawLine");
    DrawLine drawLine = new DrawLine();
    drawLine.init();
    drawLine.start(); frame.add("Center",drawLine);
    frame.setSize(300,300);
    frame.show();
    }}class DrawPanel extends Panel implements MouseListener,MouseMotionListener {
    Vector lines = new Vector();
    int x1,y1;//start
    int x2,y2;//end public DrawPanel() {
    setBackground(Color.white);
    addMouseListener(this);
    addMouseMotionListener(this);
    } public void mouseDragged(MouseEvent e) {
    e.consume();
    x2 = e.getX();
    y2 = e.getY();
    repaint();
    } public void mousePressed(MouseEvent e) {
    e.consume();
    x1 = e.getX();
    y1 = e.getY();
    x2 = -1;//标识,作用有2点A和B
    } public void mouseReleased(MouseEvent e) {
    e.consume();
    lines.addElement(new Rectangle(x1,y1,e.getX(),e.getY()));
    x2 = -1;
    repaint();
    } public void mouseMoved(MouseEvent e) {
    } public void mouseEntered(MouseEvent e) {
    } public void mouseExited(MouseEvent e) {
    } public void mouseClicked(MouseEvent e) {
    } public void paint(Graphics g) {
    int np = lines.size(); g.setColor(getForeground()); for (int i = 0;i < np;i++) {
    Rectangle r = (Rectangle)lines.elementAt(i);
    if (r.width != -1) {
    g.drawLine(r.x,r.y,r.width,r.height);
    }
    else {
    g.drawLine(r.x,r.y,r.x,r.y);//若按下鼠标后立即放开,则画一个点.(作用A)
    }
    } if (x2 != -1) {
    g.drawLine(x1,y1,x2,y2);//鼠标移动中的时候,画还未确定的线段.(作用B)
    }
    }}
    这个是applet 的 你改下就行了