1

我目前正在尝试使用 Griffon 0.9.5 和FlamingoBuilder创建一个应用程序。

我已将Application.groovyframeClass中的值更改为并尝试了一些操作,以便将功能区添加到应用程序窗口。'org.jvnet.flamingo.ribbon.JRibbonFrame'

我的第一次尝试是创建一个ribbonTask带有嵌套节点的ribbonBand节点。应用程序启动,但未显示按钮。

application(title: 'test01',
        preferredSize: [320, 240],
        pack: true,
        locationByPlatform: true,
        iconImage: imageIcon('/griffon-icon-48x48.png').image,
        {
            ribbonTask(title: 'Start') {
                    ribbonBand(id: 'fooBarBand', title: 'FooBar', image: imageIcon('/griffon-icon-48x48.png').image) {
                        commandButton(id: 'fooButton', text: 'Foo', image: imageIcon('/griffon-icon-48x48.png').image)
                        commandButton(id: 'barButton', text: 'Bar', image: imageIcon('/griffon-icon-48x48.png').image)
                    }
            }

            // add content here
            label('Content Goes Here') // delete me
        }
)

第一次尝试的截图


在我的第二次尝试中,我明确地创建了一个RibbonTask并调用了addTask. 显示按钮。但是,我不确定这是否真的是 Griffon 的做事方式。 问题:有没有更好的方法来创建功能区?

application(title: 'test01',
        preferredSize: [320, 240],
        pack: true,
        locationByPlatform: true,
        iconImage: imageIcon('/griffon-icon-48x48.png').image,
        {
            ribbonBand(id: 'fooBarBand', title: 'FooBar', image: imageIcon('/griffon-icon-48x48.png').image) {
                commandButton(id: 'fooButton', text: 'Foo', image: imageIcon('/griffon-icon-48x48.png').image)
                commandButton(id: 'barButton', text: 'Bar', image: imageIcon('/griffon-icon-48x48.png').image)
            }
            current.ribbon.addTask new RibbonTask('Start', fooBarBand)

            // add content here
            label('Content Goes Here') // delete me
        }
)

第二次尝试截图


然后我尝试ribbonApplicationMenu使用以下代码片段添加一个:

        ribbonApplicationMenu(id: 'appMenu') {
            ribbonApplicationMenuEntryPrimary(id: 'quitMenuEntry', text: 'Quit',
                    entryKind: JCommandButton.CommandButtonKind.ACTION_ONLY,
                    image: imageIcon('/griffon-icon-48x48.png').image)
        }

但是,它不起作用。我得到以下运行时异常:

java.lang.RuntimeException:无法为“ribbonApplicationMenuEntryPrimary”创建组件原因:groovy.lang.MissingPropertyException:没有这样的属性:类的文本:griffon.builder.flamingo.factory.RibbonApplicationMenuEntryPrimaryFactory

FlamingoBuilder的文档指出有一个text属性,当我删除 text 属性时,我得到一个异常,因为text必须设置该属性。我有点不知所措。这个代码片段有什么问题?

4

1 回答 1

1

恐怕第一个问题与 application() 节点工厂与ribbonFrame() 工厂有关。您会看到,Griffon 假定框架子类的行为与任何其他常规 JFrame 一样,但是 JRibbonFrame 以不同的方式处理其子类。ApplicationFactory 不知道这一点,因此添加功能区任务“失败”,除非您手动添加它们,如第二个片段中所示。

这个问题可以通过将父/子关系代码从ribbonFrame() 移动到ribbonBand/ribbonTask 工厂来解决。这需要新版本的 FlamingoBuilder。

现在关于第二个问题,这似乎是我们这边的一个错误。考虑到 FlamingoBuilder 在任何情况下都应该更新,我们也会解决这个问题。

于 2012-05-31T08:48:41.837 回答