update and paint
Hello All,
I've encountered an interesting bug:
Upon call of repaint() on an object of a class:
1) If the class extends Canvas, update() is called.
2) If the class extends JFrame, paint() is called.
Do you know why?
Thank you in advance,
Boris.
Here is the code, if you are interested:
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
public class DrawLine extends JFrame {
DrawLine() {
super("drawLine Example");
setSize(600, 600);
getContentPane().add(new My());
show();
}
static public void main(String[] args) {
new DrawLine();
}
}
class My extends JPanel {
private Vector points = new Vector();
private int lastDrawnPoint = 0;
public My() {
addMouseListener(new MouseEventHandler());
addMouseMotionListener(new MouseMotionEventHandler());
}
public void paint(Graphics g) {
System.out.println("paint invoked");
Point curPt = null;
for (int i=0; i<points.size(); i++) {
Point pt = (Point)points.elementAt(i);
if (curPt != null) {
g.drawLine(curPt.x, curPt.y, pt.x, pt.y);
}
curPt = pt;
}
lastDrawnPoint = points.size();
}
public void update(Graphics g) {
System.out.println("update invoked");
Point curPt = null;
lastDrawnPoint = Math.max(0, lastDrawnPoint-1);
for (int i=lastDrawnPoint; i><points.size(); i++) {
Point pt = (Point)points.elementAt(i);
if (curPt != null) {
g.drawLine(curPt.x, curPt.y, pt.x, pt.y);
}
curPt = pt;
}
lastDrawnPoint = points.size();
}
class MouseEventHandler extends MouseAdapter {
public void mousePressed(MouseEvent evt) {
points.addElement(evt.getPoint());
repaint();
}
}
class MouseMotionEventHandler extends MouseMotionAdapter {
public void mouseDragged(MouseEvent evt) {
points.addElement(evt.getPoint());
repaint();
}
}
}
>

