我的RCP出现了一个奇怪的问题。我没有使用Linux来开发,所以我对常见错误的了解非常少。我正在使用Ubuntu 11.10来试用RCP。
在我的RCP中,我有一个附加了两个侦听器的SWT文本 - 一个用于焦点(FocusAdapter
),另一个用于SWT.DefaultSelection
。在FocusAdapter
中,我实施了focusLost
方法。
行为是这样的,如果用户编辑文本并且点击返回键,则会调用SWT.DefaultSelection
侦听器的handleEvent
并显示一条消息确认新文本并更新Text
字段。如果用户编辑了文本,但未点击返回键并且只是在Text
字段外单击,则会调用focusLost
事件,将文本还原为原始文本文字(text.setText(originalText);
)。
当我从Eclipse启动它时似乎工作得很好但是当我通过Maven + Tycho导出产品时,这种行为似乎停止了工作。发生的情况是,当用户编辑文本时,无论用户是否点击返回键,它都只会恢复为原始文本,或者只是在Text
字段外点击。没有用于确认编辑文本的消息对话框。
从我收集的内容看来,似乎只使用focusLost事件并且返回键无效。我很抱歉,如果这是显而易见的事情,但我没有在Windows机器上遇到这个,这是我用于主要开发的。
答案 0 :(得分:10)
您可以改为倾听SWT.Traverse
并检查event.detail
是否等于SWT.TRAVERSE_RETURN
。我在Linux上测试它并且它可以工作:
public static void main(String[] args)
{
final Display display = new Display();
final Shell shell = new Shell(display);
shell.setLayout(new FillLayout());
final Text text = new Text(shell, SWT.BORDER);
text.addListener(SWT.Traverse, new Listener()
{
@Override
public void handleEvent(Event event)
{
if(event.detail == SWT.TRAVERSE_RETURN)
{
System.out.println("Enter pressed");
}
}
});
shell.pack();
shell.open();
while (!shell.isDisposed())
{
if (!display.readAndDispatch())
{
display.sleep();
}
}
display.dispose();
}
这里有一个相关的问题: