我读到使用setBounds()
命令创建GUI是不好的。
我知道如何使用布局管理器,我不得不说它们也有它们的缺点。
我正在编写游戏,有时我需要将组件堆叠在彼此之上。我发现使用布局管理器无法做到这一点,但setBounds()
完美无缺。
你能解释我如何使用布局管理器堆叠组件,并告诉我为什么使用setBounds()
方法来实现这个目的是不好的?
或者是没有问题,结合用Java编码的游戏GUI?
答案 0 :(得分:2)
当涉及计算控件的正确大小,在调整GUI大小等等时将所有内容放在正确的位置等等时,LayoutManagers会减轻你的负担。
基本上你只是告诉布局管理员"我想要在角落里进行这种控制"并且布局管理器负责将其保留在那里,无论窗口发生什么,用户是否调整大小,移动它,......
游戏界面可能更加动态,元素不断移动。布局管理器通常不是特别擅长这些东西,它们通常是为静态用户界面设计的。大多数桌面软件(引用需要?;))利用这样的静态接口和布局管理器来帮助这些接口的程序员,使他们不必担心上述所有细节。
由于游戏界面是一个不适合布局管理器的用例,因此不能将它用于所有内容是绝对合理的。你可能仍然可以使用这两种技术的组合 - 使用布局管理器来定位你的静态界面元素(你应该在某个地方有一个菜单按钮或者类似的东西吗?)但是对所有动态元素使用绝对定位。 / p>
不过,我建议你研究一下JavaFX,正如我在上面的评论中所说的那样。它更适合绘制动画的移动组件,并且可以为您节省大量的工作。
当然总有例外 - 例如,Sudoku界面是你可以在布局管理器上做得很好的东西,虽然它绝对是一款游戏。
答案 1 :(得分:1)
你能解释我如何使用布局管理器堆叠组件,并告诉我为什么使用setBounds()方法为此目的不好?或者是没有问题,结合用Java编码的游戏GUI?
定义堆栈?
Swing附带了一个用于堆叠组件的布局管理器。查看OverlayLayout
。它不是最灵活的,但您可以尝试使用Java Layout with Component always in Top Right中的代码,如果它能够满足您的需求。
或者,您可以查看Overlap Layout,它的布局属性更灵活。
最后,您还可以将JLabel添加到JLabel。使用一个标签作为背景。然后,您可以设置该标签的布局管理器,然后添加另一个Swing组件。