读书人

画夹重绘

发布时间: 2012-10-09 10:21:45 作者: rapoo

画板重绘
画板重绘

我在制作了自己的画板,能够实现一些功能,比方说直线,圆,矩形等,但我发现一个问题,图形画在面板上的后,我们经过缩放后,原来画的东西又不在了,我又得重新画,但和原来的不一样了。
怎么实现重绘呢???
我们画的东西有直线,有矩形,有圆,那么怎样使得他们按照原来我们画的的那样重绘出来。
直线,圆,矩形都是图形,拥有相同的方法,和属性,所以可以有个图形父类

 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);}}}

这样就可以实现重绘了

读书人网 >编程

热点推荐