图形重绘
当我们辛苦制作好一个画图软件时,只是因为不小心拖动了窗口大小,就导致窗体上的内容消失,这时候,我们就需要通过图形重绘来保存窗体上的内容了!!!
第一步 保存图形数据
如果你想把把原来的内容重新画出,就需要保存好原有的数据
例如想要保存一条直线就需要保存它的
起点 终点 还有它是一条直线
这时就发现有不同的变量需要保存,所以不能直接用数组来保存,应该运用对象保存这一串数据
public class Shapes {
public int x1,y1,x2,y2;
public String name;
}
在此之上还不仅需要把这个数据输出,还要注意想要输出的内容是什么
不同的内容有不一样的输出方法,例如一条线和一个矩形的输出内容是一定不一样的!
public void drawShape(Graphics g){
switch (name){
case "直线":
g.drawLine(x1,y1,x2,y2);
break;
case "矩形":
int w = Math.abs(x2 - x1);
int n = Math.abs(y2 - y1);
int minx = Math.min(x1, x2);
int miny = Math.min(y1, y2);
gr.drawRect(minx, miny, w, n);
break;
}
这就构建了一个可以存储变量的对象了
在构建之后还要将所需的变量存入对象之中
Shapes shape = new Shapes();
shape.name = name;
shape.x1 = x1;
shape.y1 = y1;
shape.x2 = x2;
shape.y2 = y2;
如此一来就可以保存一组变量了,但画图之中肯定有不止一组的数据的
这时候就需要用一个数组来对变量进行大批量的保存
public Shapes[] shapeArr = new Shapes[100];
public int index = 0;
shapeArr[index] = shape;
index++;
第二步 重绘paint ()方法
当原有窗体的作用无法发挥作用时,就需要增加新功能来满足需求!
这是就要通过继承来同时保留原有方法并添加新的方法
public class MFrame extends JFrame {
public Shapes[] shapeArr;
public void paint(Graphics g){
super.paint(g);
for(int i=0;i<shapeArr.length;i++) {
Shapes shape = shapeArr[]
}
}
}
在方法重绘后,要记得将新的类名使用,否则无法发挥新方法的作用
也就是由这样
JFrame jf = new JFrame();
变成这样
MFrame jf = new MFrame();
如此才能把新的功能运用起来
第三步 将数组数据传递到相应位置
这一步可以坚持一个原则
如果两个类之间相互引用过对方的对象,那么就可以将数据传递
在DrawMouse类中没有引用MFrame类的对象,那么就无法传递数据
所以可以通过DrawUI类,来将两者连接
jf.shapeArr = mouse.shapeArr;
这样一来,就可以将内容保存在画板上了!!!