jan*_*ith 5 java events swt event-handling
我注意到,无论操作是由用户还是系统本身引起的,ModifyListener都会被触发,例如,
Text t = new Text(shell, SWT.BORDER);
t.addModifyListener(new TModifyListener());
Run Code Online (Sandbox Code Playgroud)
................................................
private class TModifyListener implements ModifyListener
{
@Override
public void modifyText(ModifyEvent event)
{
Text text = (Text) event.widget;
t.setText(process(text.getText()));
}
}
Run Code Online (Sandbox Code Playgroud)
这将导致无限循环并使程序崩溃。你们知道如何在事件由系统生成时禁用事件侦听,并在事件由用户引起时启用它吗?
我不知道swt但是...
如果process是幂等的,那么也许setText只有当它不同于getText
另一种选择是在第一个回调中设置小部件上的某些属性,您可以查询、取消设置并且不在setText第二个回调中调用。