学习重绘后的总结
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); //利用循环,把存储在队列中的图形一个个画出来 }
重绘的总体思路是每画一个图形,就将该图形对象存入队列中,重绘就是将存储在队列中的图形对象再读取并画出来。
所以需要一个实现了自定义队列接口的类,用这个类实例化一个存储图形对象的对象,我们每画一个图形,就将该图形对象存入其中。