2010-01-21 209 views
1

我放弃了用于Java的GUI构建器,现在我完全用代码开发了它们(并非真的很难,只需几个小时的练习)。现在我正在处理事件处理。在Java中处理事件:它是否需要空的事件处理程序

但我发现,当我尝试使用一个类来实现一种监听器类型时,

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

    public void focusLost(FocusEvent e) 
    { 

    } 

}

我必须提供一个空的动作处理程序(如上)的focusLost,即使我并不需要它,或者我从编辑器nastygram说这是不是一个抽象类并且不会覆盖FocusLost方法等。

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

感谢您的任何帮助。

回答

4

JDK中已经有所有标准Listener接口的基类。这些类实现接口的所有方法,但在方法体中不做任何事情。只需将接口名称从XyzListener更改为XyzAdapter就可以得到它们。

有了这些适配器,你只需要重写你真正需要的方法:

private class TextAction extends FocusAdapter 
{ 
    @Override 
    public void focusGained(FocusEvent e) 
    { 
     responseTxt.setText("Got focus"); 
    } 
} 
+1

我强烈建议在那里添加一个@Override。 – 2010-01-21 03:27:46

+0

当然,你是对的。 – x4u 2010-01-21 03:34:41

2

在Java中的“事件”系统基本上是一个事后的黑客入侵。

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

如果您只想实现其中的一些,则可以从关联的Adapter类继承,该类为您选择不覆盖的任何内容提供默认的“无操作”实现。

+1

我也说不太明白它上涨了作为一种事后,它根本就不是一部分的语言特性(如它是在C# )。 – cletus 2010-01-21 03:17:00

+0

也许我的措辞有点强。我真正得到的是它没有语言的特定支持。 – 2010-01-21 03:20:17

相关问题