VerifyListener 和 FocusListener 之间的冲突
Conflict between VerifyListener and FocusListener
有一个 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);
}
});
当您的焦点侦听器调用 text.setText("")
时,将调用验证侦听器。在这种情况下,e.character
的值是 0,因为没有添加任何字符。据推测,您的 Verifier.isAlphabet
方法为此返回 false
并阻止更改发生。
您的验证侦听器不应测试 character
值。您应该查看 VerifyEvent
text
字段,它为您提供了正在更改的全文(您可能还需要查看 start
和 end
字段)。
Text
已经通过 setMessage
.
方法支持默认文本
因此,您可以使用 setMessage("Default");
.
而不是使用 setText("Default")
和焦点侦听器
验证侦听器应该可以正确使用它。
有一个 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);
}
});
当您的焦点侦听器调用 text.setText("")
时,将调用验证侦听器。在这种情况下,e.character
的值是 0,因为没有添加任何字符。据推测,您的 Verifier.isAlphabet
方法为此返回 false
并阻止更改发生。
您的验证侦听器不应测试 character
值。您应该查看 VerifyEvent
text
字段,它为您提供了正在更改的全文(您可能还需要查看 start
和 end
字段)。
Text
已经通过 setMessage
.
因此,您可以使用 setMessage("Default");
.
setText("Default")
和焦点侦听器
验证侦听器应该可以正确使用它。