Рекомендация для Layout Manager

Я создаю графический интерфейс для аркадной игры. Он состоит из одного JFrame с несколькими JPanels и одного JMenu, как показано на рисунке:

Я пытался использовать BorderLayout, но он не показывает панели правильно. Что я получаю, так это то, что JMenu показывает правильно. [1] регулирует ширину в соответствии с содержимым кнопок внутри. JPanel [2] выполняет почти остальную часть экрана. И [3] показывает в виде тонкой линии в конце.

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

    add(new TopMenu(), BorderLayout.PAGE_START);    // JMenu
    add(new LeftPanel(), BorderLayout.WEST);        // [1]
    add(new StatusPanel(), BorderLayout.CENTER);    // [2]
    add(new GameUI(), BorderLayout.LINE_END);       // [3]

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

2 ответа

Решение

Вы всегда можете вкладывать JPanels/ контейнеры, каждый из которых использует свой собственный макет. Таким образом, общий макет может быть BorderLayout с меню в BorderLayout.NORTH и JPanel [1] на стороне BorderLayout.EAST, а затем вложить JPanel в позицию BorderLayout.CENTER, используя другой BorderLayout или BoxLayout, и поместить другой два JPanel в этот JPanel. Например, этот CENTER JPanel может использовать BorderLayout и может удерживать JPanel [2] в своей позиции BorderLayout.NORTH и JPanel [3] в своей позиции BorderLayout.CENTER.

Ваш JPanelдолжны иметь компоненты Swing внутри, иначе они будут уменьшаться до минимального размера, когда вы вызываете pack() на JFrame,

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

Вы можете вкладывать JPanel-2 и JPanel-3 в правую панель. Ты можешь использовать FlowLayout для самой правой панели, а также помещая JPanel-1 и rightPanel в JFrame,

Если вы настаиваете на использовании менеджера макета, который выложит 3 JPanelбез вложенности, вам придется использовать GridBagLayout, JPanel-1 будет иметь ширину в 1 столбец и глубину в 2 строки. JPanel-2 будет иметь ширину 1 и 1 столбец. JPanel-3 будет иметь ширину 1 столбец и глубину 1 столбец.

Вам все равно придется установить предпочтительный размер 3 JPanel"S.

Другие вопросы по тегам