JAVA基础——重写JFrame中的paint(Graphics g)方法

为什么要重写paint方法?

当我们使用JFrame创建出窗体时,遇到窗体的尺寸改变(ie.拉伸窗体),或者窗体的部分像素被移动到屏幕之外,都会导致窗体的刷新。窗体有一个系统自带的刷新方法。但这时如果窗体中有此前绘制出的图像,则图像会随窗体的刷新而消失,这时候我们就需要将绘制图像的方法重写入JFrame的paint方法中,让图像随窗体的刷新而同步再次被绘制出来。

实现方式

函数要在类继承JFrame或者JPanel两个属性下才能实现重写,并且这个方法是系统自动调用的。
重写绘制方法的本质是将图像数据化、对象化。将图像的属性(eg. 坐标、颜色、图形类型……)和其绘制方法写入paint()。

样例:

public class DrawPad extends JFrame{
	Graphics  g;
	public static void main(String[] args) {
		new DrawPad(); 
	}
	
	// 初始化一个窗体界面
	public DrawPad() {
		this.setTitle("图形绘制");
		this.setSize(800,700);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setVisible(true);// 可视化 	
	}
	
	//在窗体被改变状态时自动调用 刷新
	int count=0;
	@Override
	public void paint(Graphics g) { //绘制容器
		super.paint(g); //调用父类的paint方法
		count++;
		System.out.println("paint"+count);  //窗体刷新时显示 paint+次数
		g.setColor(Color.YELLOW);
		g.drawLine(100, 100, 500, 100);
		g.fillRect(200, 100, 300, 100);
		g.drawRect(200, 200, 300, 100);
		g.drawOval(200, 200, 300, 100);	
	}
}

使用动作监听器手动刷新

这里要用到一个repaint()使窗体重绘,监听器写法:

public class Listener implements ActionListener {
	DrawPad drawPad;
	// 构造方法  --
	/**
	 * 	创建对象时调用 
	 * @param drawPad
	 */
	public Listener(DrawPad drawPad) {
		// TODO Auto-generated constructor stub
		this.drawPad = drawPad; //构造方法传值,使用监听器时传入其对象
	}

	@Override
	public void actionPerformed(ActionEvent e) {//对动作事件e执行如下刷新动作
		// TODO Auto-generated method stub
		drawPad.repaint();// 刷新
	}	
}
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值