event 会有一个 getSource 方法 返回产生事件的 Object

解决方案 »

  1.   

    1、java的swing事件处理是不是也象vc一样,是消息机制的??就是说比如我在一个按钮button上点了一下,vc中操作系统就会捕捉到这个“点击”事件并发消息给回调函数,java里是不是就是jvm捕捉到这个“点击”事件??然后jvm发“消息”给相应的事件处理函数的??
    答:java里面不是捕捉的,而是注册事件的,也就是说你认为他会产生什么事件而为他添加一个事件。
       然后系统会自动抛出一个事件的对象.2.再者,我同时注册了多个按钮,那程序是怎么区分并响应到底是哪个按钮被点击的?
    答:这个简单,你可以通过这个系统抛出的对象来判断是点击了那个按钮
    JButton button1 = new JButton("按钮1"),
            button2 = new JButton("按钮2");
    button1.addActionListener(this);
    button2.addActionListener(this);
    public void actionPerformed(ActionEvent event) {
    if(event.getActionCommand().equals("按钮1"))
    {
        System.out.println("按下了按钮1");
    }
    if(event.getActionCommand().equals("按钮2"))
    {
        System.out.println("按下了按钮2");
    }
       }
      

  2.   

    还可以用(e.getSource instanceOf class)
    判断是哪个类的对象
      

  3.   

    再土土地问一个:
    b1.addActionListener(...)括号里的参数是不是一个对象的引用?然后当b1按钮被按下后,系统就去找括号里引用所指对象所在的类的actionPerformed(ActionEvent event)方法??
      

  4.   

    --------
    还可以用(e.getSource instanceOf class)
    判断是哪个类的对象
    ----------------
    这个是不可取的,都同样的是JButton,那这样就判断不出来了。
    如果定义按钮了,在你的actionPerformed方法中能够调用的到这个按钮的引用,还可以用这种:
    JButton button1 = new JButton("按钮1"),
    ....
    public void actionPerformed(ActionEvent event) {
    if(event.getSource() == button1)
    {
    System.out.println("按下了按钮1");
    }
    而在事件方法中,不能直接调用按钮的引用时,就只有用
    event.getActionCommand().equals("按钮1")这种了。
    在定义时,还可以用这个按钮指定一个Command
    button1.setActionCommand(""),这样,就可以避免直接用的默认的按钮文字,在以后程序要修改按钮的文字时,事件处理程序也要改。-----------
    b1.addActionListener(...)括号里的参数是不是一个对象的引用?然后当b1按钮被按下后,系统就去找括号里引用所指对象所在的类的actionPerformed(ActionEvent event)方法??
    ------------------
    你的理解是正确的
      

  5.   

    谢谢!
    还想到一问:那,每个类是不是就只有一个actionPerformed(ActionEvent event)方法??
      

  6.   

    应该是每一个组件有一个吧!
    比方说:所有的button有一个,所有list有一个!
      

  7.   

    当然,一个类当然只能有一个actionPerformed(ActionEvent event)你在一个类中,不管什么方法,哪能写两个呢!