1

我的 RCP 有一个奇怪的问题。我不使用 Linux 进行开发,所以我对常见错误的了解非常少。我正在使用 Ubuntu 11.10 来试用 RCP。

在我的 RCP 中,我有一个 SWT 文本,它附加了两个侦听器 - 一个用于焦点 ( FocusAdapter),另一个用于SWT.DefaultSelection. 在 中FocusAdapter,我实现了该focusLost方法。

行为是这样的,如果并且当用户编辑文本并点击返回键时,将调用SWT.DefaultSelection侦听器并显示一条消息以确认新文本并更新字段。如果用户编辑文本但没有按返回键而只是在字段外单击,则调用该事件将文本恢复为原始文本 ( )。handleEventTextTextfocusLosttext.setText(originalText);

当我从 Eclipse 启动它时,这似乎工作正常,但是当我通过 Maven+Tycho 导出产品时,这种行为似乎停止工作。发生的情况是,当用户编辑文本时,它只是恢复到原始文本,而不管用户是否按下返回键,或者只是在Text字段外单击。也不会显示用于确认已编辑文本的消息对话框。

从我收集的信息来看,它似乎只使用了 focusLost 事件,而返回键没有任何效果。如果这是显而易见的事情,我深表歉意,但我没有在我用于主要开发的 Windows 机器上遇到这种情况。

4

1 回答 1

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();
}

这里有一个相关的问题:

SWT 跨平台进入检测

于 2013-05-29T20:57:36.103 回答