我放弃了GUI Builders for Java,现在我完全用代码开发它们(不是很难,只需要几个小时的练习)。现在我正在处理事件处理。
但是我发现当我尝试使用类来实现一种监听器时,例如
private class TextAction implements FocusListener
{
public void focusGained(FocusEvent e)
{
responseTxt.setText("Got focus");
}
public void focusLost(FocusEvent e)
{
}
}
我必须为focusLost提供一个空的动作处理程序(如上所示),即使我不需要它,或者我从编辑器中得到一个讨厌的图表说这不是一个抽象类,并且不会覆盖FocusLost方法等等
这是否意味着操作处理程序必须为与侦听器关联的每个事件类型显示操作处理程序,即使该操作不会在程序中使用?
感谢您提供任何帮助。
答案 0 :(得分:4)
JDK中已经存在所有标准Listener接口的基类。这些类实现了接口的所有方法,但在方法体中什么都不做。只需将接口名称从XyzListener更改为XyzAdapter即可获得它们。
使用这些适配器,您只需要覆盖您真正需要的方法:
private class TextAction extends FocusAdapter
{
@Override
public void focusGained(FocusEvent e)
{
responseTxt.setText("Got focus");
}
}
答案 1 :(得分:2)
Java中的“事件”系统基本上是一种黑客攻击。
所涉及的接口没有什么特别之处 - 就像所有接口一样,你需要实现所有他们的方法。
如果你只想实现其中的一些,你可以继承相关的Adapter类,它为你选择不覆盖的任何东西提供默认的do-nothing实现。