Ошибка Span / Grow в MigLayout? - PullRequest
4 голосов
/ 21 июля 2009

Следующее близко к тому, что я хочу, и делает то, что я ожидаю:

import javax.swing.JComboBox;
import javax.swing.JPanel;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;

import net.miginfocom.swing.MigLayout;

public class MigBug extends JFrame {

    public static void main(String args[]) {
        MigBug migbug = new MigBug();
        migbug.pack();
        migbug.setVisible(true);
    }

    public MigBug() {
        JPanel content = new JPanel();
        content.setLayout(new MigLayout("fill, debug"));

        content.add(new JLabel("Label 1"));
        content.add(new JComboBox());

        content.add(new JLabel("Label 2"));
        content.add(new JTextField(25), "growx, wrap");

        content.add(new JLabel("BIG"), "span, w :400:, h :200:, growy");

        setContentPane(content);
    }
}

Однако, если я сделаю следующее изменение:

content.add(new JLabel("BIG"), "span, w :400:, h :200:, grow");

есть. Измените составной компонент, чтобы он увеличивался как по x, так и по y, ячейка Label 1 увеличивается по x, хотя это не должно происходить.

Кто-нибудь знает, как я могу обойти это?

Ответы [ 2 ]

3 голосов
/ 21 июля 2009

Найден обходной путь, хотя и не совсем удовлетворительный. Согласно этому сообщению на форуме и к этому сообщению на форуме , MigLayout переключается с вычисления размеров компонентов на вычисление размеров столбцов, где задействован диапазон. Замена «fill» на «filly» в ограничениях макета, а затем добавление ограничений на столбцы с «grow» для каждого столбца, который должен быть разрешен для роста, кажется, исправляет это.

Рабочий код:

import javax.swing.JComboBox;
import javax.swing.JPanel;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;

import net.miginfocom.swing.MigLayout;

public class MigBug extends JFrame {

    public static void main(String args[]) {
        MigBug migbug = new MigBug();
        migbug.pack();
        migbug.setVisible(true);
    }

    public MigBug() {
        JPanel content = new JPanel();
        content.setLayout(new MigLayout("filly, debug", "[][grow][][grow]"));

        content.add(new JLabel("Label 1"));
        content.add(new JComboBox());

        content.add(new JLabel("Label 2"));
        content.add(new JTextField(25), "growx, wrap");

        content.add(new JLabel("BIG"), "span, w :400:, h :200:, grow");

        setContentPane(content);
    }
}
1 голос
/ 21 августа 2009

Вы также можете попробовать мой менеджер компоновки MatrixLayout в качестве альтернативы. Концепция похожа на MiG Layout - на основе таблицы. Это не так мощно, но кажется (во всяком случае, мне) намного проще в использовании (с большой мощью получается большая сложность). Но, честно говоря, это может быть потому, что я не очень старался понять MiG Layout.

...