画图板部分功能的实现

    此次仿XP画图板实现的功能有:直线、矩形、椭圆、圆角矩形、铅笔、刷子、橡皮、多边形

    现做仿XP画图板有3个面板:工具面板(ToolPanel)、画图板(DrawPanel)、颜色面板(ColorPanel)。

 工具面板:

    添加直线、矩形、椭圆等形状按钮,并创建动作监听器获取对按钮的动作操作

MouseListener shape_listener = new MouseListener(){
    		public void actionPerformed(MouseEvent e){//实现抽象方法
		String command = e.getActionCommand();//获取按钮上的标记
 		 }
	}

颜色面板:

    创建颜色数组利用循环添加颜色按钮,并创建颜色按钮的动作监听器对象

MouseListener color_listener = new MouseListener(){
     		public void actionPerformed(MouseEvent e){
		JButton button = (JButton)e.getSource();//获取按钮信息
		color = button.getBackground();//获取背景颜色
     		}
	}

     颜色将在鼠标按下时动态设置

      g.getColor(color)

 画图板:

    由于画这些图形都涉及鼠标的点击和移动,就需要添加鼠标监听器和鼠标移动监听器。

   

MouseAdapter mouse_listener = new MouseAdapter(){
	public void mouseClicked(MouseEvent e){};//监听鼠标点击操作
	public void mouseDragged(MouseEvent e){};//监听鼠标拖拽操作
	public void mousePressed(MouseEvent e){};//监听鼠标按下操作
	public void mouseReleased(MouseEvent e){};//监听鼠标释放操作
    }

    画直线:

       记录鼠标按下和释放时的坐标

       g.drawLine(x1,y1,x2,y2);

    画矩形:

        记录鼠标按下和释放时的坐标,需要注意的是画矩形的方法是从矩形的左上角的坐标为起点,根据长和宽画出矩形。所以获取到坐标后需要判断这两个坐     标哪一个是矩形的左上角的坐标。

       g.drawRect(Math.min(x1,x2),Math.min(y1,y2),Math.abs(x2-x1),Math.abs(y2-y1));

    画椭圆:

        椭圆是根据其外接矩形画出的,所以其画法和画矩形一样。

    画圆角矩形:

        同矩形,参数多了两个:4 个角弧度的水平直径和4 个角弧度的垂直直径

        g.drawRoundRect(x1,y1,x2,y2,int,int);

    铅笔:

       铅笔的实现是鼠标在拖拽时不断的画直线得到

       

       public void mouseDragged(MouseEvent e){
           if("pencil".equals(command)){
              x2.getX();
              y2.getY();
              g.drawLine(x1,y1,x2,y2);
              x1 = x2;
              y1 = y2;
           }
      }

     刷子:

        刷子的实现就是像铅笔一样,只要将线条画的粗点即是刷子

        g.setStroke(new BasicStroke(15));//画粗线条

  橡皮擦:

       在刷子的基础上将线条颜色规定为白色,将所画线条覆盖即是橡皮擦

       g.setColor(color.white);

  多边形:

      第一步:设置全局计数器count,获取第一个点的坐标

      

      public void mousePressed(MouseEvent e){
          x1 = e.getX();
          y1 = e.getY();
          if("Polygon".equals(command)&&count==0){//保存第一个点坐标
               a = x1;
               b = y1;
          }
      }

       第二步:当count=0时,鼠标拖动画出第一条直线,即画直线方法。之后每一条直线都是在鼠标点击时画出

       

       public void MouseRelease(MouseEvent e){
             x2 = e.getX();
             y2 = e.getY();
             if("Polygon".equals(command)){
                  if(count == 0)
                  g.drawLine(x1,y1,x2,y2);
                  //保存第一条直线的最后一个点坐标
                  x3 = x2;
                  y3 = y2;
                  count++;
             }else{//画出以后的直线
                  g.drawLine(x3,y3,x2,y2);
                  //保存之后每条直线的最后一个点的坐标
                  x3 = x2;
                  y3 = y2;
             }
        }

       第三步:画出最后一条直线

       

       public void MouseClicked(MouseEvent e){
           if("Polygon".equals(command)&&count==2)
                e.drawLine(a,b,x2,y2);
       }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值