Установка размера JPanel с помощью MiGLayout - PullRequest
1 голос
/ 03 декабря 2011

Я использую MiGLayout для создания нескольких различных JPanels, однако у меня возникла проблема с изменением размера одного из них.Ниже приведена диаграмма, показывающая, чего я хочу достичь:

-------------------------------------------------------
|                                                     |
|                        Panel 1                      |
|                                                     |
-------------------------------------------------------
--------------------------- ---------------------------
|                         | |                         |
|         Panel 2         | |          Panel 3        |
|                         | |                         |
--------------------------- ---------------------------

Главное, чего я хочу достичь, - это распространить Panel 1 на две другие панели.Я, кажется, достиг этого макета, однако у меня есть проблема, связанная с тем, что граница для Panel 1 не отображается, как показано на моей диаграмме.Я попытался использовать метод setSize, но он не сработал.

Вот код, который я использую для создания панелей (обратите внимание, я не включил виджеты внутри панели):

    // Create Panel 1
    JPanel panelOne = new JPanel();
    panelone.setSize(600, 50);
    panelOne.setBorder(BorderFactory.createTitledBorder("Panel 1"));
    panelOne.setLayout(new MigLayout());

    // Create Panel 2
    JPanel panelTwo = new JPanel();
    panelTwo.setBorder(BorderFactory.createTitledBorder("Panel 2"));
    panelTwo.setLayout(new MigLayout());

    // Create Panel 3
    JPanel panelThree = new JPanel();
    panelThree.setBorder(BorderFactory.createTitledBorder("Panel 3"));
    panelThree.setLayout(new MigLayout());

    // Add the panels to the main frame
    mainFrame.add(panelOne, "span, wrap, align center");
    mainFrame.add.add(panelTwo);
    mainFrame.add.add(panelThree);

Кто-нибудь может предложить способ показать границу, как на моей диаграмме?

Ответы [ 2 ]

4 голосов
/ 03 декабря 2011
panelone.setSize(600, 50);  // from original code

Я никогда не использовал этот макет, но макеты в целом с большей вероятностью соблюдают (обеспечивают) предпочтительный размер, чем размер.

4 голосов
/ 03 декабря 2011

Попробуйте это:

mainFrame.getContentPane().setLayout(new MigLayout());
getContentPane().add(panelTwo);
getContentPane().add(panelThree,  "wrap");   // Wrap to next row
getContentPane().add(panelOne, "dock north");

Кроме того, убедитесь, что вы добавляете элементы GUI в панель содержимого основного фрейма, а не в сам фрейм.

РЕДАКТИРОВАТЬ Изкомментарии ниже: Вы также можете использовать new CC.wrap() или new CC.dockNorth() Спасибо @Andrew Thompson и @Howard за подсказку:)

...