Java画布:直线三角形,矩形,椭圆等

刚刚开始学习做画布,大概模板参照电脑自带的画图软件来写
这就是电脑的画图界面

我们看到,首先是要有一个界面,作为画板;
然后就会有各式各样的按钮,本次主要讲添加形状按钮与换画笔颜色的按钮。

上一个做界面的我们大概都知道了,这一次我们没有复选框文本框,就是一个简单的画面,选择他的框的长宽,然后,流式布局。界面的代码,参照上个博客就好。
所以本次我们的任务分为几个步骤完成:
1.创建窗体(咱们的画布);
根据我们的需要添加三角形,直线,矩形,椭圆,多边形,三角形,画笔颜色,我这里有两种黑色和红色,7个按钮。
2.在画布上获取画笔

Graphics g = jf.getGraphics();

其中jf是界面的对象名
3.监听鼠标,并将画笔传到鼠标监听器去

DrawMouse mouse = new DrawMouse();
jf.addMouseListener(mouse);
mouse.setGr(g);
在监听器里,有
 public void setGr(Graphics g){
  gr = g;
 }

4.开始写监听的类,即DrawMouse,而按钮鼠标监听都是接口类,当我们继承之后,需要重写里面的所有方法。
对于鼠标类来说,有四个,包括按下,点击,进入,释放,而按钮就是一个方法,按下之后要执行的动作。
我们可以获取到画笔在画布的坐标,然后,通过画直线的方法去将两点坐标画出来。

         if("直线".equals(name))
         {
          gr.drawLine(x1, y1, x2, y2);
         }

当按下的按钮上是直线的时候,那么就用画直线的方法;
同理,画其他;

         if("矩形".equals(name))
         {
          gr.drawRect(Math.min(x1, x2),Math.min(y1, y2), Math.abs(x2-x1),Math.abs(y2-y1));
         }
         if("椭圆".equals(name))
         {
          gr.drawOval(Math.min(x1, x2),Math.min(y1, y2), Math.abs(x2-x1),Math.abs(y2-y1));
         }

而画三角形的时候,需要先画一条直线,然后点击某一点就将另外两条线连起来,这个时候,我用的方法就是,首先画一根线,就会进入一次按下的操作,当按下是一次的时候,我连的是一个直线,当按下并且分别保存此时的按下与释放的坐标值,当第二次按下的时候,用此时的按下坐标与前一次按下与释放的坐标相连。

画多边形的时候,主要解决的就是最后双击,让多边形实现闭合。(画多边形可以参照电脑自带画图软件的步骤)
这个时候,我们可以设置一个标志位flag=1,最后双击的时候,flag=2
具体还是看一下代码:

    public void mouseClicked(MouseEvent e)
    {
     x3=e.getX();
     y3=e.getY();
     if("多边形".equals(name)&&flag==2&&e.getClickCount()==1)
     {
      gr.drawLine(x2, y2, x3, y3);
      x2=x3;
      y2=y3;
     }
     if("多边形".equals(name)&&e.getClickCount()==2)
     {
      gr.drawLine(x1, y1, x3, y3);
      flag=1;
     }
    }
    这是在释放方法里的
         if("多边形".equals(name))
         {
          if(flag==1)
          {
           gr.drawLine(x1, y1, x2, y2);
           flag=2;
          }
         }

最后,就是画笔颜色了,同样的在按钮上先颜色的名字

 public void actionPerformed(ActionEvent e) {
  name=e.getActionCommand();
  System.out.println(name);
  if("红色".equals(name))
   gr.setColor(Color.RED);
  if("黑色".equals(name))
   gr.setColor(Color.BLACK);
 }

颜色是可以直接获取的,因为Color类里面的颜色都是静态变量,可以直接用类.颜色名就可以了。
最后来一个图
在这里插入图片描述
好啦!
如果想知道按钮上没有名字,也可以画图换颜色,请看后面。

猜你喜欢

转载自blog.csdn.net/chan_fan/article/details/83445674