SWT文本focusLost事件多次发送

时间:2014-08-14 10:59:16

标签: java swt

我使用SWT Text字段,我希望防止它在没有输入文本或只是空格的情况下去焦点。如果是这样的话,我也想通知用户。

我目前的解决方案是在FocusListener的{​​{1}}方法中查看。 但focusLost事件被发送两次,因此用户将获得两次通知,这不是我想要的。

所以我的问题是:

  1. 多次发送focusLost事件是否正常?或者我的申请中有什么问题吗?
  2. 如果是正常的:是否有可能确保用户只获得一次通知?

1 个答案:

答案 0 :(得分:2)

这里的代码工作得很好。 SWT.FocusOut只被解雇了一次:

public static void main(String[] args)
{
    Display display = new Display();
    Shell shell = new Shell(display);
    shell.setText("StackOverflow");
    shell.setLayout(new FillLayout());

    final Text text = new Text(shell, SWT.BORDER);
    text.addListener(SWT.FocusOut, new Listener()
    {
        @Override
        public void handleEvent(Event event)
        {
            if (text.getText().trim().length() < 1)
            {
                Display.getDefault().asyncExec(new Runnable()
                {
                    @Override
                    public void run()
                    {
                        System.out.println("Please enter something!");
                        if (text != null && !text.isDisposed())
                        {
                            text.setFocus();
                            text.forceFocus();
                        }
                    }
                });
            }
            else
            {
                System.out.println("Nothing to see here, move along.");
            }
        }
    });

    new Text(shell, SWT.BORDER);

    shell.pack();
    shell.open();

    while (!shell.isDisposed())
    {
        if (!display.readAndDispatch())
        {
            display.sleep();
        }
    }
    display.dispose();
}