在Frame对窗口进行重绘

这里写图片描述

实现代码:
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中的直线逐一画出。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值