我写了这门课
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小部件的实际类中引发问题,其中一些与此相关,并导致一连串的事件产生意想不到的结果。
请问有什么办法可以防止这种情况发生吗?
发布于 2017-07-19 09:04:21
我可以证实这是个问题。
从FWT Combo的Java源代码来看,它非常小,而且似乎没有做错任何事情,这使我相信这是SWT Combo Widget的一个问题。
这对你一点帮助都没有,所以我很快就找到了这个例子.
打开窗口并构造小部件之后,...add 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!。
https://stackoverflow.com/questions/45180167
复制相似问题