2017-07-19 28 views
2

修改事件我寫了這個魅影類魅影FWT組合部件似乎開槍建設

using gfx 
using fwt 

class Test { 

    Window window := Window { 
     size = Size(400, 320) 
     SashPane { 
      Combo { 
       items = Month.vals 
       onModify.add(|e| { echo("items.size is ${e->widget->items->size}") }) 
      }, 
     }, 
    } 

    Void main() { 
     window.open 
    } 
} 
當我運行它

,它會產生這樣的輸出:

items.size is 12 
items.size is 12 

這意味着修改事件正在被觸發兩次。它發生在屏幕彈出窗口的同時,我沒有任何修改Combo窗口小部件的任何機會。爲什麼?

這會導致使用多個組合窗口小部件的實際類中的問題,其中一些組件相關並導致產生意外結果的級聯事件。

請問有什麼辦法可以預防嗎?

回答

2

我可以確認這是一個問題。

看看FWT Combo的Java源代碼,它非常小,似乎沒有做錯任何事情,這導致我認爲這是SWT Combo Widget的問題。

這不幫你任何,所以我不得不用例如快速播放和發現解決這個工作...

...添加後的窗口已經打開的onModify事件偵聽器,並構建小部件。通過使用Window.onOpen()事件做到這一點:

using gfx 
using fwt 

class Testy { 
    Void main() { 
     Window { 
      size = Size(400, 320) 
      combo := null as Combo 
      onOpen.add { 
       combo.onModify.add { echo("Hello Mum!") } 
      } 
      SashPane { 
       combo = Combo { items = Month.vals }, 
      }, 
     }.open 
    } 
} 

現在你應該只得到一個Hello Mum!當組合真正被修改了。