首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >动作未被用户触发时如何关闭SWT事件监听

动作未被用户触发时如何关闭SWT事件监听
EN

Stack Overflow用户
提问于 2009-09-30 01:47:25
回答 2查看 2.4K关注 0票数 4

我注意到,无论操作是由用户还是系统本身引起的,ModifyListener都会被触发,例如,

代码语言:javascript
复制
Text t = new Text(shell, SWT.BORDER);
t.addModifyListener(new TModifyListener());

...............................................

代码语言:javascript
复制
private class TModifyListener implements ModifyListener
{

    @Override
    public void modifyText(ModifyEvent event)
    {

        Text text = (Text) event.widget;
        t.setText(process(text.getText()));
    }
}

这将导致无限循环和程序崩溃。如果事件是由系统产生的,你们知道如何关闭事件监听吗?如果事件是由用户引起的,如何开启事件监听?

EN

回答 2

Stack Overflow用户

发布于 2009-09-30 03:24:08

难道您不能在侦听器中设置一个ThreadLocal,并在重新输入时检查它吗?

只需在侦听器上设置一个布尔值字段即可。

代码语言:javascript
复制
private class TModifyListener implements ModifyListener {

    private boolean _setting;

    @Override
    public void modifyText(ModifyEvent event)
    {
            if(!_setting) {
                _setting = true;
                try {
                    Text text = (Text) event.widget;
                    t.setText(process(text.getText()));
                } finally {
                    _setting = false;
                }
            }
    }
}
票数 2
EN

Stack Overflow用户

发布于 2009-09-30 03:16:59

我不知道swt但是..。

如果process是幂等的,那么也许只有当它不同于getText时,您才能使用setText

另一种选择是在第一个回调中为小部件设置一些属性,您可以在第二个回调中查询、取消设置和不调用setText

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1495761

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档