博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于监听器那些让人头疼的事
阅读量:5051 次
发布时间:2019-06-12

本文共 3354 字,大约阅读时间需要 11 分钟。

      本人初学JAVA,对于界面开发我只能说有点蛋疼,用JAVA来做界面的话确实需要一定的耐心(不使用插件,就算使用插件的话也没好多少)既然Java提供了界面开发,老师又要求做,只能硬着头皮上啦。但是监听器还真是个难懂的地方,我是上了几次课才略微搞懂了些。

       今天是说监听器,至于界面怎么写就不说啦。

       首先,监听器是干什么的?Java是事件监听机制,我觉得龙哥对这点有个很形象的说法:就比如我们要监视一间房子中会发生什么事情,就会给这间房子装上一个摄像头。对于事件的处理在Java中有类似的机制。我们要监视一个按钮有没有被点击,就要给按钮装上一个类似监视器的东西。这个东西我们就叫做事件监听器。而监听按钮有没有被点击的这种机制就是事件监听机制。在Java当中,每个事件都对应有一个事件监听器。我刚刚开始的时候硬是没有理解监听器的作用,没理解的话就多体会上面一段话。

   其次,监听器是什么?监听器其实就是一系列的接口,说到接口就要想到接口是用来实现的,如果要用它的话,它就需要一个类来实现它的功能,例如:在写一个画图板的时候,要达到在画布的一个像素点上按下鼠标,然后在另一个点松开鼠标的时候会画一条直线的效果,这就需要给这个画布安装一个鼠标监听器了,刚刚说了,监听器是接口,接口需要一个类来实现其功能,所以我们创建一个DrawListener类,来实现MouseListener这个接口。

   然后,监听器接口怎么用?首先要有一个类来实现你所需要的监听器,以写的DrawListener类为例,那么它就要来实现一个鼠标监听器:public class drawListener implements MouseListener{}  然后为里面的功能函数写上需要的代码,比如说,我需要按下鼠标的时候获得该位置的点的坐标,这个方法就应该写在public void mousePressed(MouseEvent e) 这个函数里面。最后,将监听器的函数实现后需要给这个需要监听的对象安装上我们写的这个监听器,那就是绑定监听器,先声明一个所写的监听器类的对象,然后用对应的add函数绑上。

   我们创建的监听器类的构造函数的作用。自己创建了监听器类,那么它的构造函数起到一个传值的作用,把实例化的对象的值传给函数。

   附上画图板监听器的代码:

 

Java代码
  
  1. package jhf.draw;  
  2.   
  3. import java.awt.Color;  
  4. import java.awt.Graphics;  
  5. import java.awt.event.MouseEvent;  
  6. import java.awt.event.MouseListener;  
  7. import java.awt.event.MouseMotionListener;  
  8. import java.util.ArrayList;  
  9.   
  10. import javax.swing.ButtonGroup;  
  11. import javax.swing.ButtonModel;  
  12.   
  13. public class drawListener implements MouseListener ,MouseMotionListener{  
  14.       
  15.     private Graphics g;  
  16.     private int x1,x2,y1,y2;  
  17.     private ButtonGroup group;  
  18.     String command;  
  19.     //声明一个动态数组对象来存储shap 然后再遍历出来  
  20.     public static ArrayList<shap> shaplist=new ArrayList<shap>();  
  21.     /** 
  22.      * drawListener 的构造函数 
  23.      * @param g  一个画布区域 
  24.      * @param group  按钮组 
  25.      */  
  26.     public drawListener(Graphics g, ButtonGroup group)   
  27.     {  
  28.         this.g = g;  
  29.         this.group = group;  
  30.     }  
  31.     @Override  
  32.     public void mousePressed(MouseEvent e) {  
  33.         // TODO 自动生成的方法存根  
  34.         ButtonModel bm=group.getSelection();  
  35.         command=bm.getActionCommand();  
  36.          x1=e.getX();  
  37.          y1=e.getY();  
  38.            
  39.       
  40.     }  
  41.   
  42.     @Override  
  43.     public void mouseReleased(MouseEvent e) {  
  44.         // TODO 自动生成的方法存根  
  45.         x2=e.getX();  
  46.         y2=e.getY();  
  47.         if(command.equals("line"))  
  48.         {  
  49.             drawLine line =new drawLine(x1,y1,x2,y2);  
  50.             line.draw(g);  
  51.             shaplist.add(line);  
  52.         }  
  53.         else if(command.equals("rect"))  
  54.         {  
  55.             Color color;  
  56.             color=Color.RED;  
  57.             drawRect rect=new drawRect(x1,y1,x2,y2);  
  58.             g.setColor(color);  
  59.             rect.draw(g);  
  60.             shaplist.add(rect);  
  61.         }  
  62.         else if(command.equals("oval"))  
  63.         {  
  64.             Color color;  
  65.             color=Color.BLUE;  
  66.             drawOval oval=new drawOval(x1,y1,x2,y2);  
  67.             oval.draw(g);  
  68.             g.setColor(color);  
  69.             shaplist.add(oval);  
  70.         }  
  71.       
  72.     }     
  73. @Override  
  74.     public void mouseDragged(MouseEvent e)   
  75.     {  
  76.       
  77.       
  78.        
  79.         if(command.equals("write"))  
  80.         {  
  81.             g.setColor(Color.green);  
  82.             int x3 = e.getX();  
  83.             int y3 = e.getY();  
  84.             g.drawLine(x1, y1, x3, y3);  
  85.               
  86.             x1=x3;  
  87.             y1=y3;  
  88.         }  
  89.           
  90.     }  
  91. @Override  
  92.     public void mouseClicked(MouseEvent arg0) {  
  93.         // TODO 自动生成的方法存根  
  94.           
  95.     }  
  96. @Override  
  97.     public void mouseEntered(MouseEvent arg0) {  
  98.         // TODO 自动生成的方法存根  
  99.           
  100.     }  
  101. @Override  
  102.     public void mouseExited(MouseEvent arg0) {  
  103.         // TODO 自动生成的方法存根  
  104.           
  105.     }  
  106.   
  107. @Override  
  108.     public void mouseMoved(MouseEvent arg0) {  
  109.     // TODO 自动生成的方法存根  
  110.       
  111. }  
  112.   
  113.   
  114.   
  115.   
  116.   
  117.   
  118. }  

   画图界面中有关监听器的代码:

 

Java代码
  
  1. //在面板上加上一个用来绘制的面板  
  2.         JPanel drawPanel = new JPanel();  
  3. drawPanel.setPreferredSize(new Dimension(385,500));  
  4. //drawPanel.setBackground(Color.WHITE);  
  5.       drawPanel.setUI(ui4);  
  6. center.add(drawPanel);  
  7.   
  8.         this.setVisible(true);  
  9.         //从绘制面板上获得画布对像  
  10.         //获得绘制面板在屏幕上占据的区域,这块区域允许当前应用绘制图形  
  11.         Graphics g=drawPanel.getGraphics();  
  12.         drawListener dlis=new drawListener(g,group);//创建监听器对象  
  13.         drawPanel.addMouseListener(dlis);//安装鼠标监听器  
  14.         drawPanel.addMouseMotionListener(dlis);  

        值得说明的是,创建的类实现了几个监听器接口就要add几次。

 

  

转载于:https://www.cnblogs.com/hulala5885/p/4105559.html

你可能感兴趣的文章
java学习笔记之String类
查看>>
pymysql操作mysql
查看>>
Linux服务器删除乱码文件/文件夹的方法
查看>>
牛腩记账本core版本源码
查看>>
Word Break II
查看>>
UVA 11082 Matrix Decompressing 矩阵解压(最大流,经典)
查看>>
jdk从1.8降到jdk1.7失败
查看>>
一些关于IO流的问题
查看>>
mongo备份操作
查看>>
8 -- 深入使用Spring -- 3...1 Resource实现类InputStreamResource、ByteArrayResource
查看>>
硬件笔记之Thinkpad T470P更换2K屏幕
查看>>
一个关于vue+mysql+express的全栈项目(六)------ 聊天模型的设计
查看>>
【知识库】-数据库_MySQL 的七种 join
查看>>
.net 写文件上传下载webservice
查看>>
noSQL数据库相关软件介绍(大数据存储时候,必须使用)
查看>>
iOS开发——缩放图片
查看>>
HTTP之URL的快捷方式
查看>>
满世界都是图论
查看>>
配置链路聚合中极小错误——失之毫厘谬以千里
查看>>
代码整洁
查看>>