实现画板重绘--java

如果你对“画板”进行过调整大小的拉动,你可能发现这会短暂地出现黑模块,同时惊讶图画全部消失了。这是因为每次我们拖动时,我们的整个可视化部分进行刷新,由paint方法重新绘制。

那么我们该如何保存那些图画呢?可以利用paint函数重绘。

之前我们了解过paint函数绘图的方法,于是现在思路很清晰了。

我们需要把图画的信息全部存起来,凭借这些信息,然后再利用Graphics g的工具包来进行重绘。

考虑到直线这类图形,全部一笔绘制而成,比之多边形一类所需信息少,故我们可以分开来设计。

现在开始了:

直线类:

1.保存信息:

思考一下一笔画图形,有什么信息呢?名称,颜色,两点坐标。

我们可以通过创建一个类,来保存这些信息。

public class picture {
    int x1,y1,x2,y2;
    String picname;
    Color color;
}

我们可以引入构造方法(在对应类中写),及方法名与类名一致,但没有返回值,这往往用于初始化。

   public  Picture(String picname,Color color,int x1,int y1,int x2,int y2){
            this.x1=x1;
            this.y1=y1;
            this.x2=x2;
            this.y2=y2;
            this.picname=picname;
            this.color=color;
        }

但是这仅仅是一个图形的信息,我们可以在监听器类中建立一个数组来储存多个图形信息。

     picture[] pics=new picture[100];
     int picindex=0;

2.传入信息:

我们需要明白一般要将所有信息同步传入,否则分步传入可能会让部分信息指向空,不仅会报错。之后也不能得到所需的信息。

什么时候我们可以得到一笔画图形的所有信息呢?就在鼠标释放(mouseReleased)的时候,此时一笔画图形的信息全部具备。

但是值得注意的是,我们需要建立个对象来得到所需信息,再将这赋值给我们的数组。

一是可以很好处理数组下标问题,二是使代码段更清晰。

然后传入:

        Picture pic=new Picture(com,color,x1,y1,x2,y2);
        pics[picindex++]=pic;

3.设计绘制方法:

这个我们可以写在picture类中,先判断名称,再来绘制。这个之前早已讲过,值得注意的是在paint函数里,我们用for循环将图画一个个画出

多边形类:

1.保存信息:

我们可以把多边形、三角形,理解为一条条直线的叠加,故所需信息也差不多。

因此我们用到了继承:(既有属性,也有方法)

public class Picturehd extends Picture{
    Picturehd(String picname,Color color,int x1,int y1,int x2,int y2) {
        super(picname, color, x1, y1, x2, y2);
    }

然后同样在监听器类中建立一个数组,储存信息。

2.传入信息:

我们也要注意一次性传入,以及先创立对象,再用对象赋值给数组的方法。

我们可以在多边形类图像每次画直线时,同步传入。

例如:(三角形第一条线):

                    x4=e.getX();
                    y4=e.getY();
                    g.drawLine(x3,y3,x4,y4);
                    Picturehd pichd=new Picturehd(com,color,x3,y3,x4,y4);
                    picshd[pichdindex++]=pichd;

3.设计绘制方法:

这个比直线类更简单,因为我们只需要绘制直线,甚至不用进行分类。其他都与直线类一致!

最后,我们已经完成了图像绘制了,至于铅笔画与之同理!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值