SWT文本焦点和默认选择(返回键)事件

时间:2013-05-29 15:15:23

标签: java swt ubuntu-11.10

我的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机器上遇到这个,这是我用于主要开发的。

1 个答案:

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

这里有一个相关的问题:

SWT Cross-Platform Enter Detection