我对 SWT 相当陌生,发现在 TextField 上按“Return”(至少)会做三件事:为 SWT.KeyUp 创建一个事件,几微秒后,为 SWT.Dispose 创建一个事件,以及 SWT.DefaultSelection,后两个(不小心?)具有相同的时间戳。
我错误地认为这只是一个事件,由接收它的第一个处理程序消耗。
现在我的 KeyUp 事件被一个本来不想获取它的监听器接收到,因为应该发生的事情已经通过 dispose 和默认处理程序进行了处理。
问题是:如何检测这种情况并告诉监听“Return”的监听器忽略此事件?
“许多类似措辞的问题都收到了诸如否决票之类的反馈” 哦,是的,这是这里的一种传统:-( .
要停止正在处理的
Text
字段中的 Return,请在文本上使用遍历侦听器:
Text text = ....
text.addListener(SWT.Traverse, event ->
{
if (event.detail == SWT.TRAVERSE_RETURN)
event.doit = false;
});