如何使用MigLayout使元素无限增长?

时间:2011-11-14 20:17:55

标签: layout groovy miglayout griffon

我已经投入了一个落后于计划的桌面应用程序项目,希望我可以让项目再次运行,但是,我对桌面应用程序开发的经验很少。

我的嗜好者似乎知道他在做什么,但是从来没有设法完成任何事情,所以我只是试图修补这些混乱并将项目推出门外。

应用程序使用Griffon作为框架,使用MigLayout作为布局管理器,我认为我掌握了大部分内容,但我无法弄清楚如何获得规范所需的增长行为。

以下是我正在使用的观点:

application(title: 'MyApp',
        preferredSize: [320, 240],
        pack: true,
        locationByPlatform: true,
        iconImage: imageIcon('/griffon-icon-48x48.png').image,
        iconImages: [imageIcon('/griffon-icon-48x48.png').image,
                imageIcon('/griffon-icon-32x32.png').image,
                imageIcon('/griffon-icon-16x16.png').image]) {
    panel(layout: new MigLayout()) {
        label 'Root Directory:', constraints: 'split, span'
        textField text: 'Put RootDir here', constraints: 'growx'
        button 'Dialog', constraints: 'wrap'

        label 'To be Processed:'
        button 'Go button', constraints: 'spany 3'
        label 'Processed:', constraints: 'wrap'

        scrollPane(constraints: 'center, grow') {
            list listData: (1..20).collect { "Very Long Line $it" }
        }
        scrollPane(constraints: 'center, grow, wrap') {
            list listData: (1..5).collect { "Line $it" }
        }

        label 'info about files'
        label 'info about files', constraints: 'wrap'

        progressBar constraints: 'span, growx, wrap'
        progressBar constraints: 'span, growx'
    }
}

当我将窗口拖得更大时,顶部的文本字段和底部的两个进度条应该伸展以水平填充空间,并且两个列表应该在两个方向上拉伸。其余元素的大小应保持不变。

无论我尝试什么,如果我将columns属性设置得非常大,我只能将顶部文本框拉伸,即便如此,它只会显示出很多列,而不是更大的列。

列表也不会垂直增长,而我能够获得的最好的是让正确的列表增长到某个未知大小,然后左侧列表将会增长。

进度条会增长到包含面板的大小,如果我可以让包含面板填满整个窗口,那就很好。

那么,我错过了什么关键部分?我确信这是一个小元素,但无论我怎么努力,我似乎​​都无法让事情正确发展。任何帮助非常赞赏。

3 个答案:

答案 0 :(得分:4)

我认为问题在于您的根面板没有调整大小,因此该面板内部的任何元素都不需要调整大小。

尝试更改:

panel(layout: new MigLayout()) {

panel(layout: new MigLayout('fill')) {

答案 1 :(得分:2)

正如其他人所评论的那样,在实例化MigLayout时必须设置适当的布局约束。 如果你有miglayout plugin,那么代码可以缩短为以下

application(title: ...) {
    migLayout layoutConstraints: 'fill'
    label 'Root Directory:', constraints: 'split, span'
    ...
}

答案 2 :(得分:1)

尝试

panel(layout: new MigLayout(**"fillx"**)) {