gpt4 book ai didi

java - Listener 接口(interface)的 HandleEvent 与 Listener 接口(interface)的特定 Event 之间的区别

转载 作者:行者123 更新时间:2023-11-29 05:32:28 25 4
gpt4 key购买 nike

请帮我理解handleEvent之间的区别的 Listener接口(interface)与 <Selection/Key/Focus>Event<Selection/Key/Focus>Listener接口(interface)。提前致谢。

我遇到过handleEvent使用 Event 的方法用法为 SWT.FocusIn 的参数或 SWT.FocusOut对于 Listener界面。然后还有focusGained/focusLost FocusEvent范围。

同样与SWT.Selection相同用于 handleEvent方法然后还有keyPressed/keyReleased KeyEventKeyListener接口(interface)。

同样与SWT.KeyDown相同或 SWT.KeyUp用于 handleEvent方法然后还有widgetSelected/widgetDefaultSelected SelectionEventSelectionListener接口(interface)。

这些在我看来是相同的/重复的。我们应该使用一个与另一个相比有什么区别或原因吗?

最佳答案

您发现有类型化非类型化 事件。

正如您已经发现的那样,两者之间存在联系。键入的事件看起来像这样:

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

这真的是一个品味问题。我更喜欢添加非类型化事件监听器,因为当我只想处理一个事件时,我发现自己经常不会使用 SelectionListenerMouseListener 的所有方法。


最后:Here如果您想了解更多(并在类型化事件和非类型化事件之间建立映射),这本书值得一读。

特别是这部分:

In early versions of SWT, there were only untyped listeners. After considerable discussion between the Eclipse implementers, the SWT user community, and the developers, it was decided to include a more "JavaBeans-like" listener mechanism. It was felt that this would ease the transition to SWT for developers who were already familiar with AWT/Swing. The untyped listeners remain as the implementation mechanism for event handling in SWT. The typed listeners are defined in terms of them.

关于java - Listener 接口(interface)的 HandleEvent 与 <Selection/Key/Focus>Listener 接口(interface)的特定 <Selection/Key/Focus>Event 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20658054/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com