Fantom fwt Combo小部件似乎在构建时触发修改事件

时间:2017-07-19 02:54:27

标签: fantom

我写过这个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 个答案:

答案 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!