重绘

在画图板上画出一些图形后,如果最小化窗体,然后再将其最大化时,之前的图形会消失,为了使得之前的图形不消失,我们需要重载父类JFrame中的paint()方法,通过数组保存之前图形的相关数据在内存里,等到调用子类中paint()方法时取出数据实现重绘。
代码:
package com20130320;
import java.awt.FlowLayout;
import java.awt.Graphics;

import javax.swing.JFrame;

//继承JFrame类
public class ReDraw extends JFrame{
//声明一个DrawShape类类型的数组
MyShape[] sp;

//一般不将长代码写在主函数中
public static void main(String args[]){
ReDraw re=new ReDraw();
re.showInfo();
}


public void showInfo(){
//创建一个固定大小的窗体
this.setSize(600,600);
this.setResizable(false);
this.setDefaultCloseOperation(3);
this.setVisible(true);
//得到画布对象
Graphics gr=this.getGraphics();

//创建鼠标监听器
MyMouseListener lis=new MyMouseListener();
this.addMouseListener(lis);
//让监听器中的画布对象g指向gr的内存地址
lis.g=gr;
//让在ReDraw类中的数组指向在DrawListener中的数组地址
sp=lis.a;


}

//重载父类中的paint()
public void paint(Graphics g){
//调用父类中的paint()
super.paint(g);
show(g);
}


public void show(Graphics g){
System.out.println("执行了重绘");

for(int i=0;i<sp.length;i++){
MyShape ds=new MyShape();
ds=sp[i];
//判断ds是否为空
if(ds!=null){
g.drawOval(ds.x, ds.y, ds.w, ds.h);
}
}

}
}


package com20130320;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;


public class MyMouseListener implements MouseListener{
Graphics g;
int count=0;
//定义一个MyShape类的数组
MyShape [] a=new MyShape[100];
//(x1,y1)为点击点的坐标
int x1,y1;


public void mouseClicked(MouseEvent e) {
MyShape ds=new MyShape();
x1=e.getX();
y1=e.getY();

ds.x=x1;
ds.y=y1;
ds.w=50;
ds.h=50;
//将数据存入
a[count]=ds;
count++;
System.out.println(count);
g.drawOval(x1,y1,50,50);

}


public void mousePressed(MouseEvent e) {
}

public void mouseReleased(MouseEvent e) {
}

public void mouseEntered(MouseEvent e) {
}

public void mouseExited(MouseEvent e) {
}

}


package com20130320;

public class MyShape {
//定义MyShape类的属性
public int x;
public int y;
public int w;
public int h;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值