Вопрос

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

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, ячейка метки 1 растет в x, хотя это не должно.

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

Это было полезно?

Решение

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

Рабочий код:

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);
    }
}

Другие советы

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top