Как я могу сделать элементы бесконечными с помощью MigLayout?

Я был брошен в проект настольного приложения, который отстает от графика, в надежде, что я смогу снова запустить проект, но, увы, у меня очень мало опыта в разработке настольных приложений.

Мой предшественник, казалось, знал, что он делал, но так и не смог ничего закончить, так что мне остается попытаться исправить беспорядок и выпустить проект за дверь.

Приложение использует 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 очень большим, и даже тогда оно будет показывать только столько столбцов, а не больше.

Списки также не будут расти по вертикали вообще, и лучшее, что я смог получить, это увеличить правый список до некоторого неизвестного размера, а затем левый список будет расти.

Индикаторы выполнения вырастут до размера содержащей панель, и это нормально, если я смогу заставить содержащую панель заполнить все окно.

Итак, какой ключевой элемент мне не хватает? Я уверен, что это какой-то маленький элемент, но, как бы я ни старался, я не могу заставить все расти правильно. Любая помощь очень приветствуется.


person cdeszaq    schedule 14.11.2011    source источник


Ответы (3)


Я думаю, проблема в том, что размер вашей корневой панели не изменяется, поэтому ни один из внутренних элементов этой панели не нуждается в изменении размера.

Попробуйте изменить:

panel(layout: new MigLayout()) {

to

panel(layout: new MigLayout('fill')) {
person tim_yates    schedule 15.11.2011
comment
Хороший момент об использовании «fill», а не «fillx». Я заметил только «growx» и не заметил «grow» на двух панелях прокрутки. - person Michael Rutherfurd; 15.11.2011

Как уже отмечали другие, вы должны установить соответствующие ограничения макета при создании экземпляра MigLayout. Если у вас есть плагин miglayout, код можно сократить до следующего

application(title: ...) {
    migLayout layoutConstraints: 'fill'
    label 'Root Directory:', constraints: 'split, span'
    ...
}
person Andres Almiray    schedule 29.11.2011

Пытаться

panel(layout: new MigLayout(**"fillx"**)) {
person Michael Rutherfurd    schedule 15.11.2011