繁体   English   中英

在彼此顶部的框架上添加多个面板

[英]Add more than one panel on a frame on top of each other

我正在做一个显示正方形和圆形的项目。 圆自行移动,但是用户可以通过箭头键移动正方形。 只要圆圈碰到正方形,它就会反弹。

正方形和圆形是不同的类别(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);

默认情况下,假定层次结构中同一级别的用户界面组件不重叠。 您可以通过使用setOpaque(false)使组件透明来显式地解决此问题,假设您只在绘制组件中需要的内容,例如在使用JPanel的情况下,请确保未绘制其背景。 它在执行此操作时仍然有些随机性(取决于实现)。

有一个专门为此设计的组件:JLayeredPane( https://docs.oracle.com/javase/tutorial/uiswing/components/layeredpane.html ),它管理可以放置组件的“层”,从而使您可以完全控制哪些覆盖。

游戏通常自己实现,因为不需要JComponent的全部功能来表示一个简单的图形元素。 在那种情况下,单个组件用作“画布”,以使用paintComponent的覆盖来绘制自定义对象(请参阅: https : //docs.oracle.com/javase/tutorial/uiswing/painting/

听起来,如果您想摇摆不定,我真的建议您创建一个扩展JPanel的新类,并覆盖它的paintComponent方法。 在此方法中,您可以在参数中使用Graphics来绘制画布。 然后,您可以将此自定义面板而不是两个单独的组件添加到JFrame中,并在那里处理渲染。 然后,此渲染面板可以跟踪所有需要渲染的对象,最好使用draw(Graphics g)方法实现某些接口(Drawable?)。 这样,您可以使需要渲染的类实现Drawable接口,然后将其作为列表保留在渲染面板中,然后在paintComponent方法中对其进行迭代,并在Drawables上调用draw。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM