2014-10-06 27 views
1

歡迎您提出更好的標題建議!SWT:使用附加的ModifyListeners同步更新字段的文本

有兩個字段(NET-和總價),這兩者都是編輯。 他們有自己的ModifyListeners附件,根據適用增值稅的百分比更新其他文本的值。

The dialog 所以這是理論。

現實情況是,當任何聽衆的設置其他文本的文本屬性,另聽者觸發,觸發主叫文字的監聽器,並以此類推,直到它到達的StackOverflow。 :-)

問:是否有一個衆所周知的方法/模式來避免這種行爲呢?

我只能想到在對話框的類中的字段的假設:

boolean stopOverflow; // Stops Listeners from triggering each other 

,使聽衆檢查它;無論我們是否已經在修改事件中,都將其設置爲真/假。希望SWT是單線程的。

類似的問題可以在這裏找到:

How to limit ModifyListener for user interaction only

回答

0

還有一個更簡單的解決方案。在Dialog類中不需要額外的字段,並且只有一個額外的if。

private Text netPrice; // Let's say this holds your net-price text 

netPrice.addModifyListener(new ModifyListener() { 
    @Override 
    public void modifyText(ModifyEvent e) { 
     if (netPrice == Display.getCurrent().getFocusControl()) { 
      // 
      // Do your logic here, it's overflow safe 
      // 
     } 
    } 
}); 

以相同的方式實現您的總價文本。

2

setText,然後調用addModifyListener事後通常的方式來處理,這是一個前調用removeModifyListener

保留修改監聽器在對話框類中的字段,以便您可以跟蹤它:

private ModifyListener modifyListener = new MyModifyListener(); 

... 

text.removeModifyListener(modifyListener); 

text.setText(....); 

text.addModifyListener(modifyListener). 
相關問題