请帮助我理解handleEvent
Listener
接口与<Selection/Key/Focus>Event
接口的<Selection/Key/Focus>Listener
之间的区别。在此先感谢。
我遇到了handleEvent
方法,Event
参数的用法为SWT.FocusIn
或SWT.FocusOut
用于Listener
接口。然后还有focusGained
/ focusLost
FocusEvent
参数。
类似地,它与SWT.Selection
方法中使用的handleEvent
相同,然后还有keyPressed
/ keyReleased
KeyEvent
KeyListener
接口
与SWT.KeyDown
方法中使用的SWT.KeyUp
或handleEvent
相同,然后还有widgetSelected
/ widgetDefaultSelected
SelectionEvent
SelectionListener
界面。
这些在我看来是相同/重复的。我们应该使用一个与其他一个有什么区别或原因吗?
答案 0 :(得分:3)
您发现已键入和无类型事件。
正如您已经发现的那样,有一种联系。键入的事件是这样的事件:
button.addSelectionListener(new SelectionListener()
{
@Override
public void widgetSelected(SelectionEvent e) {}
@Override
public void widgetDefaultSelected(SelectionEvent e) {}
});
而无类型的事件看起来像这样:
button.addListener(SWT.Selection, new Listener()
{
@Override
public void handleEvent(Event e) {}
});
如果您查看Button
的来源,您会看到:
public void addSelectionListener (SelectionListener listener) {
checkWidget();
if (listener == null) error(SWT.ERROR_NULL_ARGUMENT);
TypedListener typedListener = new TypedListener(listener);
addListener(SWT.Selection, typedListener);
addListener(SWT.DefaultSelection, typedListener);
}
如您所见,addSelectionListener
只需拨打addListener
。
结论:它有点冗余,但它使源更有用。如果您想处理与选择有关的所有案例,请添加SelectionListener
。如果您只想照顾SWT.Selection
,请添加Listener
。
这真的是品味问题。我更喜欢添加无类型的事件监听器,因为当我只想处理一个事件时,我发现自己经常不使用SelectionListener
或MouseListener
的所有方法。
最后:如果您想了解更多信息(并在类型化和非类型化事件之间进行映射),则需要阅读Here。
特别是这部分:
在SWT的早期版本中,只有无类型的侦听器。在Eclipse实施者,SWT用户社区和开发人员之间进行了大量讨论之后,决定采用更多“类似JavaBeans”的监听器机制。有人认为,对于已经熟悉AWT / Swing的开发人员来说,这将有助于向SWT过渡。无类型侦听器仍然是SWT中事件处理的实现机制。键入的侦听器是根据它们定义的。