代码之家  ›  专栏  ›  技术社区  ›  John R Doner

在Java中处理事件:它需要空事件处理程序吗?

  •  1
  • John R Doner  · 技术社区  · 15 年前

    我放弃了Java的GUI构建器,现在我完全在代码中开发了它们(不是很难,需要几个小时的练习)。现在我正在处理事件处理。

    但我发现,当我试图使用一个类来实现一种类型的侦听器时,例如

    private class TextAction implements FocusListener
    {
       public void focusGained(FocusEvent e)
       {
           responseTxt.setText("Got focus");
       }
    
       public void focusLost(FocusEvent e)
       {
    
       }
    

    }

    我必须为FocusLost提供一个空的操作处理程序(如上所述),即使我不需要它,或者我从编辑器中得到一个nastygram,说明这不是抽象类,并且不重写FocusLost方法等。

    这是否意味着操作处理程序必须为与侦听器关联的每个事件类型显示一个操作处理程序,即使该操作不会在程序中使用?

    谢谢你在这方面的帮助。

    2 回复  |  直到 15 年前
        1
  •  4
  •   x4u    15 年前

    JDK中已经存在用于所有标准侦听器接口的基类。这些类实现接口的所有方法,但在方法体中不做任何操作。您只需将接口名称从xyzlistener更改为xyzadapter就可以得到它们。

    使用这些适配器,您只需重写真正需要的方法:

    private class TextAction extends FocusAdapter
    {
       @Override
       public void focusGained(FocusEvent e) 
       { 
           responseTxt.setText("Got focus"); 
       } 
    }
    
        2
  •  2
  •   Anon.    15 年前

    Java中的“事件”系统基本上是事后的黑客攻击。

    所涉及的接口没有什么特别的-像所有接口一样,您需要实现 全部的 他们的方法。

    如果您只想实现其中的一些,那么可以从关联的适配器类继承,该类为您选择不重写的内容提供默认的不做任何事情的实现。