学习重绘后的总结
1.为什么要重绘?
我们在窗体中画了图形,当我们最小化窗体或者弹出颜色选择器时,原来的图形就不见了,于是我们需要学习重绘。
2.重绘就是把原来画的图形重新在窗体中画出来,即当我们最小化窗体或者弹出颜色选择器时,原来的图形还表现在窗体上。
3.重绘的实现:
1.重绘运用到了我上一节课学的自定义队列。我们把我们所画的图形都存入队列中,
当最小化窗体或者弹出颜色选择器时,再将之前画好的(保存在队列中的)图形对象重绘在窗体中。
2.我的简易画板:
1.建立一个窗体,带有可选择画图形的JRadioButton以及可以选择颜色的按钮。
2.建立一个画图形的接口,写好画各种图形的实现该接口的类。
如:
/**
* 定义一个画图形的接口
*/
public interface IDraw {
public void draw(java.awt.Graphics g);
}
/**
* 一个画直线的实现类
*/
import java.awt.Color;
import java.awt.Graphics;
public class ImpLine implements IDraw{
//定义坐标属性
private int x1,y1,x2,y2;
//定义颜色属性
private java.awt.Color color;
//定义一个无参构造函数
public ImpLine(){}
//定义一个带坐标值和颜色参数的参构造函数
public ImpLine(int x1,int y1,int x2,int y2,Color color){
this.x1 = x1;
this.y1 = y1;
this.x2 = x2;
this.y2 = y2;
this.color = color;
}
public void draw(Graphics g) {
g.setColor(color);
g.drawLine(x1, y1, x2, y2);
}
}
3.定义一个自定义队列接口。
4.定义一个实现自定义队列接口的实现类。
5.添加事件监听器以及事件处理类。
6.重绘需要用到paint(java.awt.Graphics g)方法,在含有主函数的类中
//重绘的方法,这个方法会自动被调用
public void paint(java.awt.Graphics g){
//调用父类中的重绘方法
super.paint(g);
//利用循环,把存储在队列中的图形一个个画出来
}
重绘的总体思路是每画一个图形,就将该图形对象存入队列中,重绘就是将存储在队列中的图形对象再读取并画出来。
所以需要一个实现了自定义队列接口的类,用这个类实例化一个存储图形对象的对象,我们每画一个图形,就将该图形对象存入其中。