在JAVA中系统如何获取事件源?比如,我添加一个button,并注册Listener。当我按下这个button,系统怎么知道用户按下了这个button,而不是按下其它的button或是进行了别的操作呢?

解决方案 »

  1.   

    这是jvm处理的,肯定有键值对应的类似hashmap之类的进行存储。
      

  2.   

    比如你实现了ActionListener接口,那么必须实现actionPerformed(ActionEvent e)方法,
    通过e.getSource()得到事件源.
      

  3.   

    如果是鼠标触发的,GUI系统会获取鼠标所在位置的component
    如果是Enter键触发的,GUI系统会获取当前拥有焦点的compoent
    如果是其他快捷键触发的,GUI系统会获取该快捷键对应的component
      

  4.   

    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;public class JCheckBox2 implements ItemListener
    {
        JFrame f = null;
        JCheckBox c4 = null;
        JCheckBox c5 = null;
       
        JCheckBox2(){
            f = new JFrame("JCheckBox");
            Container contentPane = f.getContentPane();
            contentPane.setLayout(new GridLayout(2,1));
            JPanel p1 = new JPanel();
            p1.setLayout(new GridLayout(1,3));
            p1.setBorder(BorderFactory.createTitledBorder("您最喜欢哪一家速食店呢?"));
            JCheckBox c1 = new JCheckBox("麦当劳");
            JCheckBox c2 = new JCheckBox("肯德鸡");
            JCheckBox c3 = new JCheckBox("21世纪");
            p1.add(c1);
            p1.add(c2);
            p1.add(c3);
            JPanel p2 = new JPanel();
            p2.setLayout(new GridLayout(2,1));
            p2.setBorder(BorderFactory.createTitledBorder("您喜欢哪种程序语言,喜欢的请打勾:"));
            c4 = new JCheckBox("JAVA",new ImageIcon(".\\icons\\x.jpg"));
            c5 = new JCheckBox("C++",new ImageIcon(".\\icons\\x.jpg"));
            c4.addItemListener(this);///////////////////////////////////////////指明了是c4
            c5.addItemListener(this);
            p2.add(c4);
            p2.add(c5);
            contentPane.add(p1);
            contentPane.add(p2);
            f.pack();
            f.show();
            f.addWindowListener(new WindowAdapter() {
                public void windowClosing(WindowEvent e) {
                        System.exit(0);
                }
            });
        }
       
        public void itemStateChanged(ItemEvent e)
        {
            if (e.getStateChange() == e.SELECTED)
            {
                if(e.getSource() == c4)
                    c4.setIcon(new ImageIcon("D:\\gif\\1.gif"));
                if(e.getSource() == c5)
                    c5.setIcon(new ImageIcon("D:\\gif\\1.gif"));
               
            }
            else
            {
                if(e.getSource() == c4)
                    c4.setIcon(new ImageIcon("D:\\gif\\1.gif"));
                if(e.getSource() == c5)
                    c5.setIcon(new ImageIcon("D:\\gif\\1.gif"));
            }
        }
         
        public static void main(String args[])
        {
            new JCheckBox2();
        }
    }
      

  5.   

    其实这个问题很好解决,不知道你用的是什么开发软件,如果用的是netbeans,这些东西都是自动生成的,那些按纽的事件代码都是自动天家的,比较方便```
      

  6.   

    用e.getSource().equals(你要确定的组件)
    或用e.getActionCommand().equals(要确定的组件名)