有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

VerifyListener和FocusListener之间的java冲突

有一个SWT文本框。我正在设置它的默认文本

  1. 设置焦点侦听器,以便当焦点位于文本框上时,删除默认文本

  2. 验证侦听器设置为确保只输入字母表

但是,在文本框上设置焦点时,文本不会设置为空。是什么导致了这个问题

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);
     }
 });

共 (2) 个答案

  1. # 1 楼答案

    Text已经通过方法^{}支持默认文本

    因此,不用setText("Default")和焦点侦听器,只需使用setMessage("Default");

    验证侦听器应该正确使用它

  2. # 2 楼答案

    当焦点侦听器调用text.setText("")时,将调用验证侦听器。在本例中,e.character的值为0,因为没有添加任何字符。大概您的Verifier.isAlphabet方法正在为此返回false,并阻止发生更改

    验证侦听器不应测试character值。您应该查看VerifyEventtext字段,该字段提供正在更改的全文(您可能还需要查看startend字段)