0

我读到使用该setBounds()命令创建 GUI 是不好的。

我知道如何使用布局管理器,我不得不说它们也有其缺点。

我现在正在编写游戏,有时我需要将组件堆叠在一起。我发现没有办法使用布局管理器来做到这一点,但setBounds()效果很好。

您能否解释一下我如何使用布局管理器堆叠组件,并告诉我为什么setBounds()为此目的使用该方法不好?或者它是否可以与用 Java 编码的游戏 GUI 结合使用?

4

2 回答 2

2

在计算控件的正确大小、在调整 GUI 大小时将所有内容放置在正确的位置等方面,LayoutManagers 减轻了您的负担。

基本上你只需告诉布局管理器“我希望这个控件在角落里”,布局管理器负责将它保持在那里,无论窗口发生什么,用户是否调整它的大小,移动它,......

游戏界面可能更加动态,元素不断移动。布局管理器通常不是特别擅长这些东西,它们通常是为静态用户界面设计的。大多数桌面软件(需要引用?;))利用这样的静态界面和布局管理器来帮助这些界面的程序员,这样他们就不必为上述所有这些细节而烦恼。

由于游戏界面是一个不适合布局管理器的用例,因此不将其用于所有事情是绝对合理的。您仍然可以使用这两种技术的组合 - 使用布局管理器来定位您的静态界面元素(您应该在某处有一个菜单按钮或类似的东西?)但对所有移动的动态元素使用绝对定位。

尽管如此,我还是建议您研究 JavaFX,如我在上面的评论中所述。它更适合绘制动画、移动的组件,并且可以为您节省大量工作。

当然总有例外——例如数独界面是你可以用布局管理器做得很好的东西,尽管它绝对是一个游戏。

于 2017-07-28T13:03:54.337 回答
1

您能否解释一下我如何使用布局管理器来堆叠组件,并告诉我为什么为此目的使用 setBounds() 方法是不好的?或者它是否可以与用 Java 编码的游戏 GUI 结合使用?

定义堆栈?

Swing 带有一个用于堆叠组件的布局管理器。查看OverlayLayout. 它不是最灵活的,但您可以尝试以下代码:Java Layout with Component always in Top Right to if it do you want.

或者,您可以查看Overlap Layout,它的布局属性更加灵活。

最后,您还可以将 JLabel 添加到 JLabel。使用一个标签作为背景。然后您可以设置该标签的布局管理器,然后添加另一个 Swing 组件。

于 2017-07-28T14:35:12.087 回答