接口方法和抽象方法如何调用默认?

时间:2012-08-28 05:17:32

标签: java swing interface actionlistener

当我们实现Listener,Renderer或Editor时,内部方法如何自动调用Java?

代码:

Class A implements ActionListener{
   A(){
    //bla bla
    //bla bla 
    this.addActionListener(btn);

   }
   public void actionPerformed(ActionEvent e){**// How actionPerformed method called        //automatically if we register button**

   }
}

注册按钮对象后如何自动调用 actionPerformed方法?我们只是将btn对象传递给 addActionListener(btn)。如何在内部调用该方法?

我通过addActionListener方法*中的netbeans进行了检查。 没有actionPerformed方法的调用方法。如果我们注册它继续工作。它是否通过中的任何地方的线程调用?但我检查了源代码。 什么都没有。怎么样?

4 个答案:

答案 0 :(得分:3)

使用EventListenerList中列出的约定API,从父JComponent拥有的here调度事件。 Editors and Renderers由拥有的视图组件引发。

附录:我们可以创建相同的界面吗?怎么样?

是的,JFreeChart是一个相当容易获得的例子。虽然图表本身不是JComponent,但它使用same model作为其自己的events

答案 1 :(得分:2)

在Java中,任何发生在任何Windows组件上的内容都由Event Dispatcher Thread

处理
  

事件调度线程(EDT)是Java中使用的后台线程   从Abstract Window Toolkit(AWT)图形处理事件   用户界面事件队列。这些事件主要是更新事件   导致用户界面组件重绘或输入   输入设备(如鼠标或键盘)中的事件。

无论何时单击或执行某些事件,EDT都会启动动作侦听器,这就是为什么在动作侦听器中执行任何Thread.sleep最终会冻结UI一段时间。

由于你的类实现了一个给定的接口,你的类将保证EDT它将拥有一系列EDT可以用来做任何需要的方法。

有关EDT的更多信息,请查看this Oracle文档。

答案 2 :(得分:2)

这很神奇。

AWT API会为您处理事件处理。然后将这些事件排队并分派到各个组件(通过一系列步骤)。然后,每个感兴趣的一方处理那些他们感兴趣的请求,然后将它们传递到食物链,直到它到达您。

问题是,你在乎吗?

在某些方面是的,但是你关心电的工作原理还是你可以打开电灯开关?

我确信有更好的文档,但你可以看一下http://docs.oracle.com/javase/1.3/docs/guide/awt/designspec/events.html的初学者......

答案 3 :(得分:1)

当操作发生时,Swing会自动调用ActionListener。实际的方法调用位于Swing源代码的深处。