实现代码:
MyLine.java文件代码:
import java.awt.*;
public class MyLine {
private int orgX;
private int orgY;
private int endX;
private int endY;
public MyLine(int orgX, int orgY, int endX, int endY) {
// TODO Auto-generated constructor stub
this.orgX = orgX;
this.orgY = orgY;
this.endX = endX;
this.endY = endY;
}
public void drawMe(Graphics g) {
g.drawLine(orgX, orgY, endX, endY);
}
}
DrawLine.java文件代码:
import java.awt.*;
import java.awt.event.*;
import java.util.*;
public class DrawLine extends Frame {
int orgX;
int orgY;
int endX;
int endY;
Vector vLines = new Vector();
public void paint(Graphics g)
{
Enumeration e = vLines.elements();
while(e.hasMoreElements())
{
MyLine line = (MyLine)e.nextElement();
line.drawMe(g);
}
//g.drawLine(orgX, orgY, endX, endY);
}
public DrawLine()
{
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
dispose();
System.exit(0);
}
});
this.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e)
{
orgX = e.getX();
orgY = e.getY();
}
public void mouseReleased(MouseEvent e)
{
endX = e.getX();
endY = e.getY();
vLines.add(new MyLine(orgX, orgY, endX, endY));
repaint();
}
});
}
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("Starting TestMyButton...");
DrawLine mainFrame = new DrawLine();
mainFrame.setSize(400, 400);
mainFrame.setTitle("TestButton");
mainFrame.setVisible(true);
}
}
运行结果:
当窗口最小化是,里面画的直线不会消失(消失也就是所谓的曝光),mousePressed方法中没有使用画图的函数,而是使用了repaint方法,但是用repaint方法时java会自动去调用paint方法,因为paint方法将每次鼠标按下和松开的坐标放在集合对象Vector中,之后调用drawMe函数将集合对象里的起始坐标构成的直线逐一画出。当调用repaint画第二条直线时会先清空Frame上的内容(也就是调用update方法),在调用paint方法将集合对象Vector中的直线逐一画出。