2014-11-13 3 views
1

Я работаю над проектом, где я показываю квадрат и круг. Круг движется сам по себе, но пользователь перемещает квадрат с помощью клавиш со стрелками. Всякий раз, когда круг касается квадрата, он подбирается.Добавить несколько панелей на раму друг на друга

Площадь и круг - разные классы (2 разные панели). Я хочу добавить эти два кадра, один поверх другого, чтобы они были видны. Может ли кто-нибудь сказать мне, как это сделать?

JFrame n = new JFrame(); 
n.setTitle("Background Color for JFrame"); 
n.setSize(1000,600); 
n.setLocationRelativeTo(null); 
n.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

n.setResizable(false); 

n.add(new Ball()); 
n.add(new Team()); 

n.setVisible(true); 
+0

Это будет любая игра? – tobs

+0

Да, его футбольный матч :) – user3512121

+0

Тогда, вероятно, лучше использовать один отдельный JPane и нарисовать его компоненты круга с помощью Graphics2D. Тогда ваши игровые объекты просто подклассы 'java.lang.Object' и содержат метод' draw() ', который принимает графику в качестве аргумента. – tobs

ответ

0

Предполагается, что компоненты пользовательского интерфейса на одном уровне в иерархии не перекрываются по умолчанию. Вы можете явно обойти это, сделав ваши компоненты прозрачными с помощью setOpaque(false), предполагая, что вы заботитесь только о том, что нужно для компонентов, например. в случае JPanel убедитесь, что его фон не нарисован. Его все еще несколько случайный (зависимый от реализации), какой компонент имеет преимущество над другим при выполнении этого.

Существует компонент, специально предназначенный для этого: JLayeredPane (https://docs.oracle.com/javase/tutorial/uiswing/components/layeredpane.html), который управляет «слоями», в котором компоненты могут быть помещены, что дает вам полный контроль над которыми он накладывается.

Игры часто реализуют это сами по себе, поскольку полные функции JComponent не нужны для представления простого графического элемента. В этом случае один компонент используется как «холст» для рисования самоопределяемых объектов с использованием переопределения paintComponent (см.: https://docs.oracle.com/javase/tutorial/uiswing/painting/)

0

Если вы хотите сделать это в качелях, как это звучит, я действительно рекомендовал бы создать новый класс, расширяющий JPanel, и переопределить его метод paintComponent. В этом методе вы используете графику в аргументе для рисования на холсте. Затем вы можете добавить эту настраиваемую панель вместо двух отдельных компонентов в JFrame и обработать рендеринг там. Эта панель рендеринга может отслеживать все объекты, которые нужно визуализировать, предпочтительнее реализовать какой-либо интерфейс (Drawable?) С помощью метода draw (Graphics g). Таким образом, вы можете сделать свои классы, которые нужно визуализировать, реализовать свой интерфейс Drawable, сохранить в качестве списка в панели рендеринга и просто перебирать их в вашем методе paintComponent и вызывать призыв к вашим Drawables.

Смежные вопросы