在一个框架上添加多个面板

时间:2014-11-13 18:07:30

标签: java swing jframe jpanel

我正在开展一个展示正方形和圆形的项目。 圆圈自行移动,但用户通过箭头键移动方块。每当圆圈接触广场时,它就会反弹。

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

2 个答案:

答案 0 :(得分: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/

答案 1 :(得分:0)

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