java画板程序,java创建画板应用程序

  java画板程序,java创建画板应用程序

  现在,我们来谈谈如何用Java实现一个简单的画板。要实现的功能包括:选择图形(正方形、圆形、多边形.)和选择颜色。

  首先打开windows下的画图软件,我们知道需要一个JFrame要画画,我们需要一个画板;我们必须选择图形和颜色,所以我们也将它们应用于按钮组件。说了这么多,我们需要的原材料基本都做好了。接下来,我们必须考虑布局:我们采用最简单的布局,在表单的顶部有一个选择图形的按钮,中间有一个画板,底部有一个选择颜色的按钮。就是这样:

  我们把图形按钮和颜色按钮安排在两个面板上,画板是单个面板。对于布局,我们使用BorderLayout()布局管理器,将后台组件分为上下左右中五个区域。图形按钮和颜色按钮还挺多的。一定要一个一个加吗?不是,我们可以用数组来存储绘图的图形信息和颜色信息,然后通过循环添加。速度很快,以后很容易添加相应的按钮来扩展画板的功能。代码如下:

  String [] Shape={ 直线,曲线,圆,喷枪,橡皮擦,矩形,椭圆,圆角矩形,圆弧,多边形,图形,三角形,实心圆,树叶 }。for(int I=0;iShape.lengthI){ JButton button=new JButton(Shape[I]);button . addactionlistener(dl);//添加事件监控机制shape panel . Add(button);} Color [] color={Color。黑色,蓝色,白色,灰色,红色,彩色。青色,颜色.绿色,颜色.深灰色,颜色.粉红色};for(int I=0;icolor.lengthI){ JButton button=new JButton();button . addactionlistener(dl);//添加事件侦听机制button . setpreferredsize(new dimension(30,30));button . set background(color[I]);ColorPanel.add(按钮);}这里,我们的UI做好了。我们可以喝杯茶休息一下。

  我们的画板怎么知道用户点击了哪个图形按钮和颜色按钮?是的,我们会想到事件监控。但是事件监控只是告诉我们用户按了按钮?我们如何知道这是一个颜色按钮还是一个图形按钮?是什么图形?它是什么颜色?这是我们下一个要解决的问题。

  在上面创建图形按钮和颜色按钮的时候,不知道大家有没有发现两个按钮的区别?是的,图形按钮有标题,颜色按钮有背景色。基于此,我们可以判断用户按的是图形按钮还是颜色按钮。那你怎么获取按钮传递的图形和颜色信息呢?我们可以给listening类添加形状和颜色属性来保存它。代码如下:

  已执行公共操作(ActionEvent E){ if(E . getactioncommand()。equals(){//如无信息,则为颜色按钮jbutton button=(jbutton)e . getsource();color=button . get background();system . out . println( color= color);} else { JButton button=(JButton)e . getsource();shape=button . getactioncommand();system . out . println( String= shape);}}哇,我们到这里的时候,工作已经完成一大半了。

  下一步是根据获取的颜色和图形信息进行绘制。先说最简单的色彩设置。我们只需要设置用户按下鼠标时画笔的颜色属性。

  那么我们如何绘制图形呢?图形可以通过单击鼠标、拖动、按下然后释放来完成.如何实现?对,判断,根据形状判断,并据此行动。

  按压完成的图形有:正方形、圆形、弧形.这些图形绘制起来也比较简单,只需得到要绘制的点下的坐标值即可。如下所示:

  public void mousePressed(MouseEv

  ent e) {         g=(Graphics2D) df.getGraphics();         g.setColor(color);         x1=e.getX();         y1=e.getY();         if(shape.equals("圆")){             g.drawOval(x1, y1, 30, 30);         }else if(shape.equals("矩形")){             g.drawRect(x1, y1, 30, 40);         }else if(shape.equals("圆角矩形")){             g.drawRoundRect(x1, y1, 30, 40, 5, 10);         }else if(shape.equals("椭圆")){             g.drawOval(x1, y1, 30, 20);         }else if(shape.equals("弧线")){             g.drawArc(x1, y1, 100, 60, 0, 180);         }     }按下并拖动才能完成的有:直线。我们只需记录下按下是的坐标与松开是的坐标,然后连接两点,就可以画直线了。代码如下:

  

public void mouseReleased(MouseEvent e) {            x2 = e.getX();            y2 = e.getY();            if (shape.equals("直线")) {                g.drawLine(x1, y1, x2, y2);            }else if(shape.equals("多边形")&&!flag){                g.drawLine(x1, y1, x2, y2);                newx1=x1;                newy1=y1;                newx2=x2;                newy2=y2;                flag=true;            }      }

拖动完成的有:曲线、橡皮擦、喷枪。曲线,我们也是用画线的方法来实现,但我们每次只画一个点,即起始坐标相同,却每次画点的坐标为鼠标拖动过程中每一位置的坐标。橡皮擦呢?我们先把画笔颜色设置成画板背景色,用画曲线的方法,即鼠标所在的地方都画成背景色,实现橡皮擦的功能,为了突出效果,我们使用Graphics2D,把画笔调粗。这样,效果更加明显。喷枪,我们使用的是随机数,及拖动鼠标过程中,同时随机的画出数十个点,来模拟喷枪随机的效果。代码如下:

 

  

public void mouseDragged(MouseEvent e) {            x2 = e.getX();            y2 = e.getY();            if (shape.equals("曲线")) {//                g.setStroke(new BasicStroke(10));            //                g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);                g.drawLine(x1, y1, x2, y2);                x1 = x2;                y1 = y2;            }else if(shape.equals("橡皮擦")){                g.setStroke(new BasicStroke(80));                                            g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);                g.setColor(Color.WHITE);                g.drawLine(x1, y1, x2, y2);                x1 = x2;                y1 = y2;            }else if(shape.equals("喷枪")){            //    g.setStroke(new BasicStroke(2));      //不用加粗                                    //    g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);                for(int k=0;k<20;k++){                    Random i=new Random();                           int a=i.nextInt(8);                    int b=i.nextInt(10);                    g.drawLine(x2+a, y2+b, x2+a, y2+b);                }            }        }

接下来,重点讲一下多边形的绘制。在绘制多变形时,第一条边与画直线是一样的,往后,鼠标每点一次,就画一条直线,当鼠标点两下时,就画两条直线,形成封闭的多边形。怎么实现呢?最重要的是要用四个变量来存储上一个点的坐标与最开始的坐标,每点一次,就在新的点与上一个点之间画直线,点两次就多画一条直线,围成封闭图形。代码如下:

 

  

public void mouseClicked(MouseEvent e) {         if(shape.equals("多边形")&&flag){             x2=e.getX();        //获取新的点的坐标             y2=e.getY();             if(e.getClickCount()==2){                 g.drawLine(newx1, newy1, newx2, newy2);                 flag=false;             }             g.drawLine(newx2, newy2, x2, y2);                          newx2=x2;   //存下上个点的坐标             newy2=y2;            }}

到这里,我们终于大功告成啦,虽然还是很小儿科,但这是我们编程路上很重要的一步啦。看一下成果图吧:

 

  

 

  以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持盛行IT。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: