疯狂java


您现在的位置: 疯狂软件 >> 新闻资讯 >> 正文

Java中用得比较顺手的事件监听


 

 
  第一次听说监听是三年前,做一个webGIS的项目,当时对Listener的印象就是个“监视器”,监视着界面的一举一动,一有动静就触发对应的响应。
 
一、概述
         通过对界面的某一或某些操作添加监听,可以自发地调用监听函数/监听类,对操作作出反应。举个栗子:被监听的操作是“你惹你妈生气了”,添加的响应是“你妈给你爸打电话,你爸回家了,你爸打你一顿 ”。所以不管什么时候,只要“你惹你妈生气了”,都会触发这个操作的监听,最终结果是每次你都会被你爸打一顿。屡试不爽,无一例外。这就是事件监听,java.util.EventListener。
 
二、监听事件种类
        Listener分很多种,但我总结不出来一个宏观框架,这里只把常用的CS监听列出来讲讲,不足留待以后补充:ActionListener,MouseListener,PopMenuListener,windowListener等等。
 
            
 
三、监听事件实现途径
1. 直接在控件中添加监听
如:给“保存按钮”添加ActionListener监听
 
复制代码
1         saveCharaEditButton.addActionListener(new ActionListener() {
2             
3             @Override
4             public void actionPerformed(ActionEvent e) {
5                 // TODO Auto-generated method stub
6                 save();
7             }
8         });
复制代码
2.写一个监听类,实现监听接口。
添加事件监听时只需要 添加这个监听类就ok了。【PS:这个内部类与函数并列写就可以,不用另建类文件,只是前面注意不要加public修饰符。默认只能有一个public类。】
 
复制代码
 1     public JPanel setRightPanel(){
 2         JPanel rightPanel = new JPanel();
 3         double[][] size = {{15,TableLayout.FILL,30,TableLayout.FILL,35},{10,30,10,TableLayout.FILL}};
 4         rightPanel.setLayout(new TableLayout(size));
 5         JButton saveCharaEditButton = new JButton("保存编辑");
 6         JButton enableCharaEditButton = new JButton("启用编辑");
 7         rightPanel.add(enableCharaEditButton, "1,1");
 8         rightPanel.add(saveCharaEditButton, "3,1");
 9         rightPanel.add(setCharaJCTablePanel(), "0,3,4,3");
10         saveCharaEditButton.addActionListener(new saveEditToFloodCharacterValueListener());//添加监听
11         return rightPanel;
12     }
复制代码
复制代码
 1     class saveEditToFloodCharacterValueListener implements ActionListener{
 2 
 3         @Override
 4         public void actionPerformed(ActionEvent e) {
 5             // TODO Auto-generated method stub
 6             FloodCharacterValue floodCharacterValue = new FloodCharacterValue();            
 7             floodCharacterValue = FloodCharacterValue.transFldPropToFloodCharacterValue(editCharaFldprop);
 8             m_doc.m_floodExtractCharacterValue = floodCharacterValue;
 9         }
10     }
复制代码
 3. 添加适配器,也可以实现监听。
首先说一下适配器和监听接口的不同:new一个监听接口,需要重载该接口下面的所有方法,你删除任何一个,都会报错;但是适配器可以只重载你需要的那个方法。
 
以windowListener为例,给对话框dialog添加监听addWindowListerner,然后监听内容为窗口适配器WindowAdapter。对比如下:
 
(1)监听接口【默认重载所有方法,功能需求单一时不推荐】
 
复制代码
                                        dialog.addWindowListener(new WindowListener() {
                                            @Override
                                            public void windowOpened(WindowEvent e) {
                                                // TODO Auto-generated method stub
                                            }
                                            @Override
                                            public void windowIconified(WindowEvent e) {
                                                // TODO Auto-generated method stub
                                            }
                                            @Override
                                            public void windowDeiconified(WindowEvent e) {
                                                // TODO Auto-generated method stub
                                            }
                                            @Override
                                            public void windowDeactivated(WindowEvent e) {
                                                // TODO Auto-generated method stub
                                            }
                                            @Override
                                            public void windowClosing(WindowEvent e) {
                                                // TODO Auto-generated method stub
                                            }
                                            @Override
                                            public void windowClosed(WindowEvent e) {
                                                // TODO Auto-generated method stub
                                            }
                                            @Override
                                            public void windowActivated(WindowEvent e) {
                                                // TODO Auto-generated method stub
                                            }
                                        });
复制代码
(2)添加适配器【可以只重载需要的方法,功能单一时推荐】
 
复制代码
 1     dialog.addWindowListener(new WindowAdapter() {
 2         @Override
 3         public void windowClosed(WindowEvent e) {
 4             // TODO Auto-generated method stub
 5             JDialog dialog2 = (JDialog) e.getSource();
 6             set_infoSectionList(update_infoSectionListByProp(prop));
 7             if (basinCheckList != null && !basinCheckList.isEmpty() && basinCheckList.get(0).getCHECKED()==1) {
 8                 tableCharaShowPanel.updateData(schemeType, get_infoSectionList(), false);            
 9             }else {
10                 tableCharaShowPanel.updateData(schemeType, get_infoSectionList(), true);            
11             }
12             super.windowClosed(e);
13             dialog2.dispose();
14         }
15     });
复制代码
另外,关于添加哪些适配器,可以选择WindowAdapter,右键菜单中选择-resources-override/implement methods... - 勾选需要添加的方法即可。
 
 
 
四、小结
 
以上是一些Java事件监听与使用方法的一些介绍,属于入门级别。高级应用后期再予以学习与记录。