画板功能拓展--java

之前我们已经完成了一个简易画板,但是功能远远不够,所以让我们升级画板吧。

添加图形:实心矩形,实心圆形,等腰三角形,三角形,多边形

添加颜色:任意喜欢颜色

添加工具:铅笔,橡皮擦

最终效果图:

让我们开始操作吧!

1.添加相应的按钮。

先创建数组存放按钮文本(既有文字文本,也有颜色文本)。

再将按钮加入到界面中,同时与监听器绑定在一起。

值得注意的是:颜色按钮过小,需要给其设置一个尺寸,同时还要给其附上颜色。

2.完成图形与颜色按钮功能。

a:按照是否具有文本分类:(颜色按钮无文本)

 if(btncom.equals(""))

再对按钮反应进行一些设置:

if(btncom.equals(""))
       {
           JButton btn=(JButton)e.getSource();
           btncl=btn.getBackground();
           g.setColor(btncl);
       }else{
           com=btncom;
       }

因为颜色按钮的反应是给画图工具设置颜色,故需要得到按钮的Background。

这时我们可以建立一个按钮对象,让其获取按钮的所有信息,再让我们的颜色属性得到按钮对象的Background。

而之所以在btncom得到图形按钮命令时,另创变量com获取btncom,不能一步到位。这是为了:防止一个命令既用来判断按钮种类,又判断按钮内容。多次判断,很可能出现意想不到的错误,需要警惕。

b:完成图形绘制的方法:

先用   if(com.equals("  "))   来判断什么图形。

实心矩形,实心圆形都是Grphics g自带的,于是我们可以直接调用。

等腰三角形:

 g.drawLine(Math.min(x1,x2),Math.max(y1,y2),Math.max(x1,x2),Math.max(y1,y2));
 g.drawLine((x1+x2)/2,Math.min(y1,y2),Math.min(x1,x2),Math.max(y1,y2));
 g.drawLine((x1+x2)/2,Math.min(y1,y2),Math.max(x1,x2),Math.max(y1,y2));

三角形:我们可以点上三个点,让它们按序相连。

这次我们需要在mouseclicked方法中填写代码:

先记录第一点坐标,再得到第二点坐标,这时将它们连线;

最后得到第三点坐标,让它与之前两点坐标都连线就可行了。

需要用到:switch(num)来决定第几点,同时绘制三点后要重新从第一点开始。

 if(com.equals("三角形"))
        {
            switch (num)
            {
                case 1:
                    x3=e.getX();
                    y3=e.getY();
                    num++;
                    break;
                case 2:
                    x4=e.getX();
                    y4=e.getY();
                    g.drawLine(x3,y3,x4,y4);
                    num++;
                    break;
                case 3:
                    x5=e.getX();
                    y5=e.getY();
                    g.drawLine(x4,y4,x5,y5);
                    g.drawLine(x3,y3,x5,y5);
                    num=1;
                    break;
                default:
                    break;
            }
        }

多边形:大致与三角形一致,不过需要一直保存第一点,同时要将之后两点迭代相连。

另外,我们可以用鼠标右键来使图形封口,即最后一点与起点相连。

在mouseClicked方法中key=e.getButton();这样可以得到鼠标键位(鼠标右键等于3),于是我们的代码可以完成了。
if(com.equals("多边形")){
            switch (num1){
                case 1:
                    x3= e.getX();
                    y3= e.getY();
                    x5=x3;
                    y5=y3;
                    num1++;
                case 2:
                    x4= e.getX();
                    y4= e.getY();
                    g.drawLine(x5,y5,x4,y4);
                    num1++;
                case 3:
                    x5= e.getX();
                    y5= e.getY();
                    g.drawLine(x4,y4,x5,y5);
                    num1=2;
                default:
                    break;
            }
            if(key==3){
                g.drawLine(e.getX(),e.getY(),x3,y3);
            }
        }

3.添加橡皮擦与铅笔功能。

由于橡皮擦与铅笔均是需要不断得到坐标信息才可以发挥作用的,我们需要使用一个新的接口

MouseMotionListener,使用方法与之前是一致的,不多赘述。

它提供了两个方法mouseDragged(鼠标拖动)与mouseMoved(鼠标移动),这次我们使用mouseDragged。

铅笔就是让每一时刻得到的点一一相连,使得成为一条线。

而橡皮檫就是实时在画板上绘制白色实心矩形(值得注意的是不是纯白,rgb均为238)来遮盖图层,达到消除的目的。

 if(com.equals("铅笔")){
            int x= e.getX();
            int y= e.getY();
            g.drawLine(x,y,x,y);
        }
        if(com.equals("橡皮擦")){
            Color white=new Color(238,238,238);
           g.setColor(white);
            int x= e.getX();
            int y= e.getY();
            g.fillRect(x,y,60,60);

        }

这样我们就完成了!!!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值