我写过这个Fantom课程
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小部件上的任何内容。为什么呢?
这导致在使用多个Combo小部件的真实类中出现问题,其中一些小部件相关并导致一系列事件产生意外结果。
请问有什么办法可以预防吗?
答案 0 :(得分: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!
。