我使用SWT Text字段,并且当它没有输入文本或只有空格时,我想防止它散焦。如果是这种情况,我也想通知用户。
我当前的解决方案是在FocusListenerfocusLost方法中检查它。
但是focusLost事件发送了两次,因此用户将收到两次通知,这不是我想要的。所以我的问题是:


focusLost事件ist多次发送是否正常?还是我的应用程序有问题?
如果正常:是否有可能确保仅通知用户一次?

最佳答案

此代码在这里工作正常。 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();
}

09-27 00:37