JLayeredPane 中的 Pack 方法

Pack Method In JLayeredPane

我正在创建一个贪吃蛇游戏,我需要使用一个 JLayeredPane 来容纳 2 个 Jpanel,然后这个 JLayeredPane 将被插入到一个 JFrame 中。我这样做的原因是因为我需要有一个基础层——游戏,以及一个可以在棋盘上生成水果的层。我没有直接在棋盘上这样做的原因是因为棋盘不断被重新粉刷,我需要一种方法来在玩家每次收集水果时随机改变水果的颜色。然而,水果会随着棋盘的重新粉刷而不断改变颜色,并且会根据数组生成新的随机颜色。

简单地使用 JLayeredPane 的问题是我需要框架与其内部的组件完美契合,setPreferredSize 似乎没有这样做,因为它没有考虑插图。当 setResize(false) 时,insets 与实际 inset 值不匹配,所以我不能简单地添加 insets。

所以我的问题是,如何让 JLayeredPane 适合 JPanel,其中这些 JPanel 中的组件具有尺寸,然后将此 JLayeredPane 放入 JFrame。

How to Use Layered Panes: Setting a Component's Position Within Its Depth 所示,使用 setBounds() 将组件放置在 JLayeredPane.

或者,在 JCOmponentJPanel 中覆盖 paintComponent() 并在蛇层下方渲染水果层。如果不需要重新采样,drawImage() 在这种情况下相当快。