VerifyListener和FocusListener

时间:2016-08-07 07:11:22

标签: java swt listener

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

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

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

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

    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 个答案:

答案 0 :(得分:2)

Text已通过setMessage方法支持默认文字。

因此,您可以使用setText("Default")而不是使用setMessage("Default");和焦点监听器。

验证侦听器应该可以正常使用它。

答案 1 :(得分:0)

当您的焦点侦听器调用text.setText("")时,将调用验证侦听器。在这种情况下,e.character的值为0,因为没有添加字符。据推测,您的Verifier.isAlphabet方法正在为此返回false并阻止更改发生。

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