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();
      }
    }
    天晴了,起飞吧
  • 相关阅读:
    Oracle 安装报错 [INS-06101] IP address of localhost could not be determined 解决方法输入日志标题
    Linux下安装oracle数据库提示DISPLAY not set. Please set the DISPLAY and try again。
    redhat 关机注销命令详解
    VirtualBox的四种网络连接方式
    修改RedHat的系统显示时间
    insufficient memory to configure kdump(没有足够的内存)解决方法(待验证、待解决)
    xen坑随笔 heartbeat dpkg垃圾数据库清除
    tomcat 监控脚本
    负载均衡随笔
    GIT命令介绍
  • 原文地址:https://www.cnblogs.com/jianqiao123/p/10804893.html
Copyright © 2011-2022 走看看