2017-07-28 74 views
0

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

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

我正在编程一个游戏的时刻,有时我需要堆叠组件上面彼此。我发现没有办法使用布局管理器来做到这一点,但setBounds()完美的作品。

您能否解释我如何使用布局管理器堆叠组件,并告诉我为什么使用setBounds()方法为此目的不好? 还是很好,与Java编码的游戏GUI一起使用?当涉及到的东西像计算控制的正确尺寸,位置在正确的地方的一切,当GUI被调整等

+0

显示您尝试过的代码。要使用布局管理器堆叠组件,请使用'Box.createVerticalBox()'。 – markspace

+0

我现在不会使用Swing来编写任何Java GUI,特别是不是用于游戏的。你有没有看过JavaFX?它来自动画背景,所以它应该更适合您的目的。 – sina

+0

绝对定位对于游戏来说可能是很好的(取决于游戏风格,就是这样)。如果你想用布局管理器堆叠东西,你可以看看分层的窗格:https://docs.oracle.com/javase/tutorial/uiswing/components/layeredpane.html – Berger

回答

2

布局管理采取了很多的重量离开你的肩部

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

游戏界面是可能会随着元素不断移动而动态变得更加动态布局管理员通常不擅长这些,他们通常是为静态用户界面设计的。大多数桌面软件(需要引用?))利用这样的静态接口,并且布局管理器可以帮助这些接口的程序员,使他们不必担心上面提到的所有细节。

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

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

当然总会有例外 - 例如Sudoku界面就是你可以很好地处理布局管理器的事情,尽管它绝对是一款游戏。

1

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

定义堆栈?

Swing附带了用于堆叠组件的布局管理器。查看OverlayLayout。这不是最灵活的,但你可以用Java Layout with Component always in Top Right中的代码进行试验,看它是否符合你的要求。

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

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