使用 setBounds() 创建 GUI

Creating a GUI using setBounds()

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

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

我目前正在编写游戏,有时我需要将组件堆叠在一起。我找不到使用布局管理器执行此操作的方法,但 setBounds() 工作得很好。

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

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

基本上你只需告诉布局管理器 "I want this control over there in the corner" 布局管理器负责将它保存在那里,无论 window 发生什么,用户是否调整它的大小,移动它,.. .

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

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

不过,我还是建议您查看 JavaFX,如我在上面的评论中所述。它更适合绘制动画、移动组件,应该可以为您节省大量工作。

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

Could you explain how I can stack Components using Layout Managers and also tell me why it is bad to use the setBounds() method for this purpose? Or is it fine, in conjunction with game GUIs coded in Java?

定义堆栈?

Swing 带有用于堆叠组件的布局管理器。查看 OverlayLayout。它不是最灵活的,但您可以试验以下代码: 看它是否符合您的要求。

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

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