如何限制修改监听器仅用于用户交互

发布于 2025-01-07 14:43:27 字数 202 浏览 2 评论 0原文

我有一个带有附加修改监听器的文本框。
在实现的modifyText(ModifyEvent e)中,我执行所需的功能。

问题是,每次文本更改都会触发此事件。

如果以编程方式更改文本(通过代码设置文本),我不希望它触发。 我希望它仅在用户更改代码时触发(我不能使用按键监听器,因为当用户单击箭头按钮等时它也会被触发,它也不会检测用户是否复制和粘贴文本)

I have a textbox with attached ModifyListener.
In implemented modifyText(ModifyEvent e) I execute desired functionality.

The problem with that, that this event is triggered on every text change.

I don't want it to trigger if text was altered programmaticly (by setting text via code).
I want it to trigger only when user changes the code (I can't use keylistener because it will be triggered also when user click on arrow buttons and etc, it also won't detect if user copy&paste text)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

屌丝范 2025-01-14 14:43:27

您可以在调用 setText(..) 之前取消注册您的 ModifyListener 并在之后重新注册。

You could unregister your ModifyListener before calling setText(..) and reregister it afterwards.

怀里藏娇 2025-01-14 14:43:27

用textBox.addKeyListener(...) 和textBox.addMouseListener(...) 代替ModifyListener 怎么样?

How about textBox.addKeyListener(...) and textBox.addMouseListener(...) instead of ModifyListener?

谁与争疯 2025-01-14 14:43:27

您可以尝试使用 Focusout 侦听器......然后您将获得用户仅输入一次的值。

Text text;
text.addListener(SWT.FocusOut, new Listener() {
    @Override
    public void handleEvent(Event arg0) {

        //Your code here.....

    }
});

You can try using Focusout listener.... then you will get the value which user has entered only once.

Text text;
text.addListener(SWT.FocusOut, new Listener() {
    @Override
    public void handleEvent(Event arg0) {

        //Your code here.....

    }
});
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文