2016-08-07 2 views
0

Текстовое поле SWT. Я устанавливаю для него текст по умолчанию.Конфликт между VerifyListener и FocusListener

  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

Text уже имеет текст по умолчанию, используя метод setMessage.

Итак, вместо использования setText("Default") и прослушивателя фокуса вы можете просто использовать setMessage("Default");.

Слушатель проверки должен работать правильно с ним.

+0

спасибо, это работает. –

0

Когда фокус слушателя вызывает text.setText("") подтверждать слушатель называется. В этом случае значение e.character равно 0, потому что символ не добавляется. Предположительно, ваш метод Verifier.isAlphabet возвращает false для этого и останавливает изменение.

Ваш регистратор проверки не должен тестировать значение character. Вы должны посмотреть на поле VerifyEventtext, которое дает вам полный текст, который вы хотите изменить (вам также может понадобиться посмотреть поля start и end).

Смежные вопросы