【问题标题】:Understanding the widgetSelected event and the widgetDefaultSelected event in the swt SelectionListener?了解swt SelectionListener中的widgetSelected事件和widgetDefaultSelected事件?
【发布时间】:2015-05-13 06:21:07
【问题描述】:

我无法理解 SWT SelectionListener 中两种方法之间的区别。 javadoc如下:

无效 org.eclipse.swt.events.SelectionListener.widgetSelected(SelectionEvent e)

在控件中发生选择时发送。

例如,当用户选择一个项目时,选择发生在列表中 或使用键盘或鼠标的项目。在某些平台上,该事件 当按下鼠标按钮或键时发生。在其他人身上,它会发生 当鼠标或键被释放时。确切的键或鼠标手势 导致此事件是特定于平台的。

无效 org.eclipse.swt.events.SelectionListener.widgetDefaultSelected(SelectionEvent e)

在控件中发生默认选择时发送。

例如,在某些平台上,默认选择出现在列表中,当 用户双击一个项目或在文本中键入返回。一些 平台,当按下鼠标按钮或键时发生该事件。在 其他,当鼠标或键被释放时发生。确切的密钥或 导致此事件的鼠标手势是特定于平台的。

在我看来widgetSelected() 在用户以任何方式选择小部件时都会被调用。 widgetDefaultSelected() 在用户完成与小部件交互时被调用。对于 Text 小部件,按 Enter 键;对于列表,这将是双击列表项;对于日期,按 Enter 键。

这种理解正确吗?

【问题讨论】:

    标签: java swt listener


    【解决方案1】:

    您的一般理解是正确的,尽管“完成”一词可能并非在所有情况下都 100% 准确。

    发送(默认)选择事件的小部件在其各自addSelectionListener 方法的JavaDoc 中记录了特定细节。在那里您可以阅读是否以及何时发送widgetSelected 和/或widgetDefaultSelected

    例如,如果您查看 Link::addSelectionListener JavaDoc,您会发现从未调用过 widgetDefaultSelected()

    【讨论】:

    • 谢谢。 widgetDefaultSelected() 从未被调用? javadoc说“当用户更改控件的值时调用widgetSelected。当按下ENTER时通常调用widgetDefaultSelected。”
    • 感谢您的提示,我正在查看一个过时的 SWT 版本。我的目的是证明这两个事件的意义和存在是特定于小部件的。我会相应地更改帖子。
    • 当我自己通过代码调用“setSelection”时,如何调用“widgetSelected”的回调?
    • 以编程方式更改选择不会触发事件。赫里福德的原因是避免在if !programaticallySected... 之类的事件中使用保护代码。最好也“手动”调用事件代码。如果不可避免地使用widget.notifyListeners(SWT.Seletion,null)
    猜你喜欢
    • 2022-01-15
    • 2011-11-05
    • 1970-01-01
    • 1970-01-01
    • 2013-04-19
    • 2017-01-26
    • 2022-01-24
    • 2013-01-07
    相关资源
    最近更新 更多