GridBagLayout неприятности - PullRequest
       32

GridBagLayout неприятности

0 голосов
/ 07 февраля 2012


Я пытаюсь сделать простой макет игры. Я создаю свой макет из Контейнеров - все контейнеры аналогичны моему примеру (это означает JPanel, setlayout, добавить компоненты, вернуть JPanel).

Структура всего макета: (это 3 в основном макете)
верхний - BorderLayout.PAGE_START; // меню
центр - BorderLayout.PAGE_CENTER; // centerContainer ()
внизу - BorderLayout.PAGE_END; // statusBar - просто контейнер с текстом


размещение этих 3-х контейнеров работает нормально, но проблема в размещении в centerContainer.
Центральная структура контейнера: 3 контейнера - aboutServerContainer, aboutGameContainer, gameContainer.

gameContainer имеет размер 450x450

Я хочу запустить serveInfo на той же высоте, что и gameContainer и gameInfo, под serverInfo, но он каким-то образом указывает на serverInfo и gameInfo, но он также освобождает место под gameContainer (я не хочу здесь свободного места).

enter image description here

private Container centerContainer() {
        JPanel centerJPanelJP = new JPanel();
        GridBagConstraints gbc = new GridBagConstraints();
        stredniJPanelJP.setLayout(new GridBagLayout());

        //gbc.fill = GridBagConstraints.BOTH;
        gbc.gridx = 0;
        gbc.gridy = 0;
        gbc.gridheight = 1;
        centerJPanelJP.add(aboutServerContainer(),gbc);

        gbc.gridheight = 1;
        gbc.gridy = 1;
        centerJPanelJP.add(aboutGameContainer(),gbc);

        gbc.gridheight = 2;
        gbc.gridx = 0;
        gbc.gridy = 0;
        centerJPanelJP.add(gamePanelContainer(),gbc);

        return centerJPanelJP;
    }

Ответы [ 2 ]

3 голосов
/ 07 февраля 2012

Похоже, вы пытаетесь создать макет, подобный следующему:

+-----+-----+
|  A  |     |
+-----+  C  |
|  B  |     |
+-----+-----+

Чтобы достичь этого, ограничения сетки должны быть следующими:

  |  x  y  width  height
--+---------------------
A |  0  0    1       1 
B |  0  1    1       1 
C |  1  0    1       2 

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

0 голосов
/ 07 февраля 2012

Почему бы не пойти так:

Есть основной BroderLayout

  • ничего не добавить к PAGE_START
  • добавить центральный контейнер в CENTER
  • добавить VerticalPanel в LINE_START -в вертикальной панели добавить serverInfo -в вертикальной панели добавить gameInfo -добавить строку состояния к PAGE_END
...