Fantom fwt Combo 小部件似乎在构建时触发修改事件
Fantom fwt Combo widget seems to fire modify event on construction
我写了这个Fantomclass
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
这意味着修改事件被触发了两次。它与 window 在屏幕上弹出的同时发生,我没有任何机会修改 Combo 小部件上的任何内容。为什么?
这会在使用多个 Combo 小部件的真实 class 中引起问题,其中一些小部件相关并导致产生意外结果的级联事件。
请问有什么办法可以避免这种情况吗?
我可以确认这是个问题。
正在查看 FWT Combo, it's pretty small and doesn't seem to do anything wrong, which leads me to believe that it's a issue with the SWT Combo Widget 的 Java 源代码。
这对你没有任何帮助,所以我快速玩了一下这个例子,发现这个解决办法...
...添加 onModify
事件侦听器 在 打开 window 之后,构建小部件。通过使用 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!
。
我写了这个Fantomclass
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
这意味着修改事件被触发了两次。它与 window 在屏幕上弹出的同时发生,我没有任何机会修改 Combo 小部件上的任何内容。为什么?
这会在使用多个 Combo 小部件的真实 class 中引起问题,其中一些小部件相关并导致产生意外结果的级联事件。
请问有什么办法可以避免这种情况吗?
我可以确认这是个问题。
正在查看 FWT Combo, it's pretty small and doesn't seem to do anything wrong, which leads me to believe that it's a issue with the SWT Combo Widget 的 Java 源代码。
这对你没有任何帮助,所以我快速玩了一下这个例子,发现这个解决办法...
...添加 onModify
事件侦听器 在 打开 window 之后,构建小部件。通过使用 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!
。