Fantom fwt Combo виджет, кажется, запускает модифицировать событие на строительстве
Я написал этот класс 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, некоторые из которых связаны, и вызывает каскад событий, который приводит к неожиданным результатам.
Есть ли способ предотвратить это, пожалуйста?
1 ответ
Я могу подтвердить, что это проблема.
Глядя на исходный код Java для FWT Combo, он довольно маленький и, кажется, не делает ничего плохого, что наводит меня на мысль, что это проблема с 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!
когда комбо на самом деле модифицируется.