VerifyListener 和 FocusListener 冲突
Posted
技术标签:
【中文标题】VerifyListener 和 FocusListener 冲突【英文标题】:Conflict between VerifyListener and FocusListener 【发布时间】:2016-12-13 04:52:11 【问题描述】:有一个 SWT 文本框。我正在为其设置默认文本。
设置了焦点侦听器,以便当焦点在文本框上时,删除默认文本。
设置了验证侦听器以确保仅输入字母。
但是,当焦点设置在文本框上时,文本不会设置为空。是什么导致了这个问题?
final Text text = new Text(parent, SWT.NONE);
text.setText("Default");
text.addFocusListener( new FocusAdapter()
@Override
public void focusGained(FocusEvent event)
if("Default".equals(text.getText()))
text.setText("");
);
text.addVerifyListener( new VerifyListener()
@Override
public void verifyText(VerifyEvent e)
e.doit = Verifier.isAlphabet(e.character);
);
【问题讨论】:
【参考方案1】:Text
已经通过 setMessage
方法支持默认文本。
因此,您可以使用setMessage("Default");
,而不是使用setText("Default")
和焦点监听器。
验证侦听器应该可以正常工作。
【讨论】:
【参考方案2】:当您的焦点侦听器调用text.setText("")
时,将调用验证侦听器。在这种情况下,e.character
的值为 0,因为没有添加任何字符。大概您的 Verifier.isAlphabet
方法正在为此返回 false
并阻止更改发生。
您的验证侦听器不应测试character
值。您应该查看 VerifyEvent
text
字段,它会为您提供正在更改的全文(您可能还需要查看 start
和 end
字段)。
【讨论】:
以上是关于VerifyListener 和 FocusListener 冲突的主要内容,如果未能解决你的问题,请参考以下文章
第三十一节:扫盲并发和并行同步和异步进程和线程阻塞和非阻塞响应和吞吐等
shell中$()和 ` `${}${!}${#}$[] 和$(()),[ ] 和(( ))和 [[ ]]
Java基础8---面向对象代码块和继承和this和super和重写和重载和final
Java基础8---面向对象代码块和继承和this和super和重写和重载和final
JS中some()和every()和join()和concat()和pop(),push(),shift(),unshfit()和map()和filter()