【问题标题】:Conflict between VerifyListener and FocusListenerVerifyListener 和 FocusListener 冲突
【发布时间】:2016-12-13 04:52:11
【问题描述】:

有一个 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);
     }
 });

【问题讨论】:

    标签: java swt listener


    【解决方案1】:

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

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

    验证侦听器应该可以正常工作。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-08-27
        • 2012-09-10
        • 2012-08-24
        • 2021-03-06
        • 2015-04-06
        • 2012-04-07
        • 2015-12-10
        • 2016-04-05
        相关资源
        最近更新 更多