VerifyListener和FocusListener之间的java冲突
有一个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
已经通过方法^{因此,不用
setText("Default")
和焦点侦听器,只需使用setMessage("Default");
验证侦听器应该正确使用它
# 2 楼答案
当焦点侦听器调用
text.setText("")
时,将调用验证侦听器。在本例中,e.character
的值为0,因为没有添加任何字符。大概您的Verifier.isAlphabet
方法正在为此返回false
,并阻止发生更改验证侦听器不应测试
character
值。您应该查看VerifyEvent
text
字段,该字段提供正在更改的全文(您可能还需要查看start
和end
字段)