2016-08-07 48 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字段,該字段可讓您更改全文(您可能還需要查看startend字段)。