напористый и испанский беспорядок макет

1

Почему метка, которая охватывает две строки по вертикали, превышает границы ее ячеек?

Скомпилированный код:

public class MigLayoutTests {

    public static void main(String[] args) {

        JFrame frame = new JFrame();
        frame.setSize(500, 500);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLocationRelativeTo(null);

        JPanel mainPanel = new JPanel(new MigLayout("wrap 2, debug, fill", "", ""));

        JPanel greyPanel = new JPanel();
        greyPanel.setBackground(Color.GRAY);

        mainPanel.add(new JLabel("<html>text<br>over<br>two<br>rows</html>"), "spany 2");
        mainPanel.add(new JLabel("First row"), "");
        mainPanel.add(new JLabel("Second row"), "");
        mainPanel.add(greyPanel, "spanx 2, pushy, grow");


        frame.setContentPane(mainPanel);
        frame.setVisible(true);

    }

}

Вот картина:

Изображение 174551


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

JPanel mainPanel = new JPanel(new MigLayout("wrap 2, debug, fill", "", "[][][fill, grow]"));
(...)
mainPanel.add(greyPanel, "spanx 2, grow");

Кроме того, если я не позволяю первой метке охватывать две строки, pushy работает.
Аналогичная проблема с spanx/pushx.

Теги:
miglayout

2 ответа

0
Лучший ответ

Это ошибка, о которой уже сообщалось MigLayout.

1

Похоже, что это должна быть ошибка с обработкой MigLayout размера ячейки. Одна вещь, которую вы можете сделать, это поместить метки в отдельную панель:

JPanel mainPanel = new JPanel(new MigLayout("debug"));

JPanel greyPanel = new JPanel();
greyPanel.setBackground(Color.GRAY);
JPanel labelPanel = new JPanel(new MigLayout("ins 0, debug"));
labelPanel.add(new JLabel("<html>text<br>over<br>two<br>rows</html>"),
                          "pushx, spany");
labelPanel.add(new JLabel("First row"), "pushx, span");
labelPanel.add(new JLabel("Second row"), "pushx, span");
mainPanel.add(labelPanel, "pushx, growx, span");
mainPanel.add(greyPanel, "span, push, grow");

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

  • 0
    Да, это ошибка. Я сообщил об этом несколько дней назад.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню