Java - Swing - 在一个JFrame中显示多个JComponents

时间:2016-06-14 15:55:07

标签: java swing

在游戏中,我想在JComponent中同时显示两个JFrame个实例。一个是背景板,另一个是玩家角色。

因此,一个组件(背景)将落后于另一个组件(一个角色)。该角色将绘制几个矩形,因此它通常会有一些完全透明的区域。

怎么做?我知道通常,当我向框架添加两个组件(方法add(Component))时,只有最后添加的组件可见。这可以通过以下代码完成:

frame.add(backg); // backg is an instance of a certain class that derives from JComponent
// (...)
frame.add(psc); // psc is an instance of an another class that derives from JComponent
frame.pack();
frame.setVisible(true);

我应该如何更改上面的代码?

1 个答案:

答案 0 :(得分:1)

首先,如果你想用Java编写游戏,试试Slick2D提供了许多工具和更好的图形功能(围绕着围绕OpenGL的LWJGL)。其次,如果您决定采用Swing路线,这是一个简单的解决方案:

    //Player + background components defined here
    playerComp.setOpaque(false);
    JLayeredPane layer = new JLayeredPane();
    layer.add(backgroundComp,1,0);
    layer.add(playerComp,2,0);

我认为上述评论中都提到了这两种解决方案。将播放器组件opaquity设置为false允许这些透明区域显示播放器后面的组件或背景图像。如果您熟悉CSS / HTML中的z-index,JLayeredPane基本上可以为Swing添加z-index,允许您设置组件的呈现顺序。因此,将播放器设置为不透明,然后在背景组件前面渲染它。

相关问题