zoukankan      html  css  js  c++  java
  • ①使用鼠标随意画线、②画直线(显示直线轨迹)、③画直线(不显示直线轨迹)

    ①PaintJFrame类

    package drawLine;
    
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    
    public class PaintJFrame extends JFrame
    {
        public PaintJFrame()
        {
            super("使用鼠标随意画线");
            this.setBounds(400,300,400,300);
            this.setDefaultCloseOperation(EXIT_ON_CLOSE);
            this.getContentPane().add(new PaintCanvas());      //创建自定义画布组件
            this.setVisible(true);
        }
        
        class PaintCanvas extends Canvas implements MouseListener, MouseMotionListener //画布组件
        {
            Point start, end;
            public PaintCanvas()
            {
                start=end=null;
                this.addMouseMotionListener(this);
                this.addMouseListener(this);
            }
            
            public void mousePressed(MouseEvent ev)            //按下鼠标事件处理方法,以下实现MouseListener接口
            {
                end = new Point(ev.getX(), ev.getY());
            }
            public void mouseReleased(MouseEvent ev) {}        //释放鼠标
            public void mouseClicked(MouseEvent ev) {}         //单击鼠标
            public void mouseEntered(MouseEvent ev) {}         //鼠标进入
            public void mouseExited(MouseEvent ev) {}          //鼠标离开
    
            public void mouseMoved(MouseEvent ev){}              //移动鼠标,实现MouseMotionListener接口
            public void mouseDragged(MouseEvent ev)            //拖动鼠标,实现MouseMotionListener接口
            {
                start = end;
                end = new Point(ev.getX(), ev.getY());
                repaint();
            }
            
            public void paint(Graphics g)                      //在Canvas上作图
            {
                g.setColor(Color.blue);
                g.fillOval(10, 10, 20,30);
                g.drawOval(10, 40, 20, 30);
                if (start!=null && end!=null)
                {
                    g.setColor(Color.blue);                    //设置画线颜色
                    g.drawLine(start.x, start.y, end.x, end.y);//画直线
                }
            }
            public void update(Graphics g)                     //更新组件
            {
                paint(g);
            }
        }//PaintCanvas类结束
        
        public static void main(String arg[])
        {
            new PaintJFrame();
        }
    }

    ②PaintLineJFrame类

    package drawLine;
    // 使用鼠标画直线
    //显示直线轨迹
    
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    
    public class PaintLineJFrame extends JFrame
    {
        public PaintLineJFrame()
        {
            super("使用鼠标画直线");
            this.setBounds(400,300,400,300);
            this.setDefaultCloseOperation(EXIT_ON_CLOSE);
            this.getContentPane().add(new PaintLineCanvas());      //创建自定义画布组件
            this.setVisible(true);
        }
        
        //画布内部类,响应鼠标事件和鼠标移动事件
        class PaintLineCanvas extends Canvas implements MouseListener, MouseMotionListener
        {
            Point start, end, lastend;
            public PaintLineCanvas()
            {
                start=end=lastend=null;
                this.addMouseMotionListener(this);
                this.addMouseListener(this);
            }
    
            public void mousePressed(MouseEvent ev)                //按下鼠标事件处理方法,以下实现MouseListener接口
            {
                start = new Point(ev.getX(), ev.getY());
            }
            public void mouseReleased(MouseEvent ev)               //释放鼠标
            {
                end = new Point(ev.getX(), ev.getY());
                this.repaint();
            } 
            public void mouseClicked(MouseEvent ev) {}             //单击鼠标
            public void mouseEntered(MouseEvent ev) {}             //鼠标进入
            public void mouseExited(MouseEvent ev) {}              //鼠标离开
    
            public void mouseMoved(MouseEvent ev){}                //移动鼠标,实现MouseMotionListener接口
            public void mouseDragged(MouseEvent ev)                //拖动鼠标,实现MouseMotionListener接口
            {
                lastend = end;
                end = new Point(ev.getX(), ev.getY());
                this.repaint();                                    //调用paint(Graphics)方法,重画
            }
            
            public void paint(Graphics g)                          //在Canvas上作图
            {
                if (start!=null && lastend!=null)
                {
    //??                g.setXORMode(getBackground());
                    g.setColor(this.getBackground()); 
                    g.drawLine(start.x,start.y,lastend.x,lastend.y);//用背景色画线即擦除原线
    //                g.drawOval(start.x, start.y, lastend.x, lastend.y);      //画椭圆
                    g.setColor(Color.blue);                        //设置画线颜色
                    g.drawLine(start.x, start.y, end.x, end.y);    //画直线
    //            g.drawOval(start.x, start.y, end.x, end.y);      //画椭圆
    //            g.drawRect(start.x, start.y, end.x, end.y);      //画圆角矩形
                }
            }
            public void update(Graphics g)                         //更新组件
            {
                this.paint(g);
            }
        }//PaintLineCanvas类结束
        
        public static void main(String arg[])
        {
            new PaintLineJFrame();
        }
    }

    ③PaintLineJFrame1类

    package drawLine;
    
    // 使用鼠标画直线。
    //只响应鼠标事件,没有响应鼠标拖动事件,松开鼠标时才画,没有显示直线轨迹。
    
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    
    public class PaintLineJFrame1 extends JFrame
    {
      public PaintLineJFrame1()
      {
          super("使用鼠标画直线");
          this.setBounds(400,300,400,300);
          this.setDefaultCloseOperation(EXIT_ON_CLOSE);
          this.getContentPane().add(new PaintLineCanvas());      //创建自定义画布组件
          this.setVisible(true);
      }
      
      class PaintLineCanvas extends Canvas implements MouseListener //画布
      {
          Point start, end;
          public PaintLineCanvas()
          {
              start=end=null;
              this.addMouseListener(this);
          }
    
          public void mousePressed(MouseEvent ev)                //按下鼠标事件处理方法,以下实现MouseListener接口
          {
              start = new Point(ev.getX(), ev.getY());
          }
          public void mouseReleased(MouseEvent ev)               //释放鼠标
          {
              end = new Point(ev.getX(), ev.getY());
              repaint();
          } 
          public void mouseClicked(MouseEvent ev) {}             //单击鼠标
          public void mouseEntered(MouseEvent ev) {}             //鼠标进入
          public void mouseExited(MouseEvent ev) {}              //鼠标离开
          
          public void paint(Graphics g)                          //在Canvas上作图
          {
              System.out.println("paint(Graphics g)");
              if (start!=null && end!=null)
              {
                  g.setColor(Color.blue);                        //设置画线颜色
                  g.drawLine(start.x, start.y, end.x, end.y);    //画直线
              }
          }
          public void update(Graphics g)                         //更新组件时,自动执行
          {
              System.out.println("update(Graphics g)");
              paint(g);
          }
      }//PaintLineCanvas类结束
      
      public static void main(String arg[])
      {
          new PaintLineJFrame1();
      }
    }
    天晴了,起飞吧
  • 相关阅读:
    关于用mybatis调用存储过程时的入参和出参的传递方法
    Bootstrap系列 -- 35. 按钮的向下向上三角形
    Bootstrap系列 -- 34. 按钮下拉菜单
    Bootstrap系列 -- 33. 等分按钮
    Bootstrap系列 -- 32. 按钮垂直分组
    Bootstrap系列 -- 31.嵌套分组
    Bootstrap系列 -- 30. 按钮工具栏
    Bootstrap系列 -- 29. 按钮组
    Bootstrap系列 -- 28. 下拉菜单状态
    Bootstrap系列 -- 27. 下拉菜单对齐方式
  • 原文地址:https://www.cnblogs.com/jianqiao123/p/10804893.html
Copyright © 2011-2022 走看看