JPanels уровня Java

Мне нужно наложить JPanels, но я не знаю, как это сделать. У меня есть 3 панели, первая для фона, вторая для персонажа/спрайта для перемещения и слоев первой панели (фон, а третья полоса сбоку (используется для кнопок и не имеет ничего общего) со слоями). Как наложить слои на панель 1 и панель 2?

редактировать: фон состоит из сетки 25x25 меток со значком в каждой.


person ZaksBack    schedule 19.05.2013    source источник


Ответы (3)


Некоторые варианты:

  • Используйте JLayeredPane, который может наслаивать компоненты, используя целочисленную константу z-порядка. Помните, что при этом вы также по существу используете нулевой макет, и поэтому вы будете нести полную ответственность за установку размера и положения всех компонентов, добавляемых в JLayeredPane.
  • Если все, что делает фон, — это рисование изображения, вы можете использовать одну JPanel, а затем просто рисовать изображение как BufferedImage, которое отображается в методе paintComponent JPanel. Спрайт также будет окрашен, но его расположение будет другим.
person Hovercraft Full Of Eels    schedule 19.05.2013

См. Как использовать многоуровневые панели.

Не забудьте использовать:

panel.setOpaque(false);

Или вам не нужно наслаивать панели. Вы можете просто нарисовать фоновое изображение на панели. См. пример Фоновая панель.

person camickr    schedule 19.05.2013

Совсем недавно мы работали над видеоигрой с видом сверху для моего класса CSC. Все, что мы сделали, это нарисовали фон, а затем все спрайты после него в методе paint() на JPanel. Мы также использовали Timer и ActionListener для постоянного обновления JPanel.

person jaredad7    schedule 19.05.2013
comment
Я согласен с этим, кроме рисунка в методе paint(...) JPanel. Этот метод отвечает за отрисовку компонента, его границ и его дочерних элементов, и если вы не хотите рисковать ошибкой при рисовании двух последних соображений (граница и дочерние элементы), обычно гораздо лучше сделать ваша картина в методе paintComponent(Graphics g) JPanel. - person Hovercraft Full Of Eels; 19.05.2013