我使用SWT Text
字段,并且当它没有输入文本或只有空格时,我想防止它散焦。如果是这种情况,我也想通知用户。
我当前的解决方案是在FocusListener
的focusLost
方法中检查它。
但是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();
}