在Java中处理事件:是否需要空的事件处理程序
我放弃了Java的GUI构建器,现在我完全用代码开发它们(不太难,需要几个小时的练习)。现在我正在处理事件处理 但我发现,当我尝试使用一个类来实现一种类型的侦听器时,例如在Java中处理事件:是否需要空的事件处理程序,java,event-handling,Java,Event Handling,我放弃了Java的GUI构建器,现在我完全用代码开发它们(不太难,需要几个小时的练习)。现在我正在处理事件处理 但我发现,当我尝试使用一个类来实现一种类型的侦听器时,例如 private class TextAction implements FocusListener { public void focusGained(FocusEvent e) { responseTxt.setText("Got focus"); } public void focu
private class TextAction implements FocusListener
{
public void focusGained(FocusEvent e)
{
responseTxt.setText("Got focus");
}
public void focusLost(FocusEvent e)
{
}
}
我必须为focusLost提供一个空的操作处理程序(如上所述),即使我不需要它,或者我从编辑器得到一个nastygram,说这不是一个抽象类,并且不重写focusLost方法,等等
这是否意味着操作处理程序必须为与侦听器关联的每个事件类型显示一个操作处理程序,即使该操作不会在程序中使用
感谢您在这方面的帮助。Java中的“事件”系统基本上是事后才被黑客攻击的
所涉及的接口没有什么特别之处-与所有接口一样,您需要实现它们的所有方法
如果您只想实现其中的一部分,那么可以从关联的适配器类继承,该类为您选择不覆盖的任何内容提供默认的不做任何事情的实现。Java中的“事件”系统基本上是事后才想到的
所涉及的接口没有什么特别之处-与所有接口一样,您需要实现它们的所有方法
如果您只想实现其中的一些,那么可以从关联的适配器类继承,该类为您选择不覆盖的任何内容提供默认的不做任何事情的实现。JDK中已经有用于所有标准侦听器接口的基类。这些类实现了接口的所有方法,但在方法体中什么也不做。您只需将接口名称从XyzListener更改为XyzAdapter即可获得它们 使用这些适配器,您只需覆盖真正需要的方法:
private class TextAction extends FocusAdapter
{
@Override
public void focusGained(FocusEvent e)
{
responseTxt.setText("Got focus");
}
}
JDK中已经有用于所有标准侦听器接口的基类。这些类实现了接口的所有方法,但在方法体中什么也不做。您只需将接口名称从XyzListener更改为XyzAdapter即可获得它们 使用这些适配器,您只需覆盖真正需要的方法:
private class TextAction extends FocusAdapter
{
@Override
public void focusGained(FocusEvent e)
{
responseTxt.setText("Got focus");
}
}
我不会说它是事后才加上去的,它根本不是语言特性的一部分(就像在C#中一样)。也许我的措辞有点强硬。我真正得到的是,它没有得到语言的具体支持。我不会说它是事后加上去的,它根本不是语言特性的一部分(就像C#中的一样)。也许我的措辞有点强硬。我真正得到的是,它没有来自语言的特定支持。我强烈建议在其中添加@Override。我强烈建议在其中添加@Override。