画板重绘:
我在制作了自己的画板,能够实现一些功能,比方说直线,圆,矩形等,但我
发现一个问题,图形画在面板上的后,我们经过缩放后,原来画的东西又不在了,我又得重新画,但和原来的不一样了。
怎么实现重绘呢???
我们画的东西有直线,有矩形,有圆,那么怎样使得
他们按照原来我们画的的那样重绘出来。
直线,圆,矩形都是图形,拥有相同的方法,和属性,所以可以有个图形父类
public abstract class NetJavaShape {
public Color color;
public abstract void draw (java.awt.Graphics g);
}
直线作为单独的类
public class ImpLine extends NetJavaShape{
private int x1,x2,y1,y2;
public ImpLine(int x1,int y1,int x2,int y2,Color color)
{
this.x1=x1;
this.x2=x2;
this.y1=y1;
this.y2=y2;
this.color=color;
}
public void draw(java.awt.Graphics g)
{
g.setColor(color);
g.drawLine(x1, y1, x2, y2);
}
}
首先,我们得有个图形类,用来存储图形对象,这样我们可以定义一个图形类对象
队列,通过这个队列来管理图形对象。
当我们
监听到
shapename后,画出图形,并将shape加到shapes.add(shape);通过队列添加,因为我们不知道要画多少图形。
private MyQueue<NetJavaShape> shapes;
NetJavaShape shape = new ImpLine(x1, y1, x2, y2, color);
if (type.equals("直线"))
shape = new ImpLine(x1, y1, x2, y2, color);
shape.draw(gr);
// 将绘制过的形状对象保存到队列
shapes.add(shape);
这样我们就将所画的图形对象加入到了shapes队列中了,接下来我们要取出这些对象,实现重新画出,在Drawpanel类中实现重绘
public class DrawPanel extends JPanel {
public void paint(Graphics g)
{
super.paint(g);
for(int i=0;i<DrawListener.shapes.size();i++){
NetJavaShape shape=DrawListener.shapes.get(i);
shape.draw(g);
}
}
}
这样就可以实现重绘了