实现代码如下:
import java.awt.*;
import java.awt.event.*;
public class DrawLine1 extends Frame {
int orgX;
int orgY;
int endX;
int endY;
Image oimg = null;
Graphics og = null;
// Vector vLines = new Vector();
public void paint(Graphics g) {
if (oimg != null) {
g.drawImage(oimg, 0, 0, this);
}
// g.drawLine(orgX, orgY, endX, endY);
}
public DrawLine1() {
setSize(400, 400);
setTitle("TestButton");
setVisible(true);
Dimension d = getSize();
oimg = createImage(d.width, d.height);
og = oimg.getGraphics();
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();
Graphics g = getGraphics();
g.setColor(Color.RED);
g.setFont(new Font(null, Font.ITALIC | Font.BOLD, 15));
// 使用此图形上下文的当前字体和颜色绘制由指定 string 给定的文本,这里的orgX等都是String类型
g.drawString("(" + orgX + "," + orgY + ")", orgX, orgY);
g.drawString("(" + e.getX() + "," + e.getY() + ")", e.getX(),
e.getY());
g.drawLine(orgX, orgY, e.getX(), e.getY());
og.setColor(Color.RED);
og.setFont(new Font(null, Font.ITALIC | Font.BOLD, 15));
og.drawString("(" + orgX + "," + orgY + ")", orgX, orgY);
og.drawString("(" + e.getX() + "," + e.getY() + ")", e.getX(),
e.getY());
og.drawLine(orgX, orgY, e.getX(), e.getY());
}
});
}
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("Starting TestMyButton...");
DrawLine1 mainFrame = new DrawLine1();
}
}
运行结果:
前面用集合对象Vector实现的重载要将每个信息都保存到集合对象中,但是用Image类的creatImage方法创建一幅用于双缓冲的、可在屏幕外绘制的图像。这样要重载的信息就保存在图像中,实现重载时只需将图像贴在Frame上。