Java用户界面布局选择

4

大家好,我对UI设计和这个社区都比较新,希望你们能对我宽容些。

概述:我正在尝试使用Java Swing为本地桌面应用程序设计GUI。像大多数初学者一样,我目前使用Netbeans作为UI构建器,以使过程更加轻松,并通过观看许多Youtube教程开始了我的过程,学习如何制作好看的UI,我发现很多人都使用“AbsoluteLayout”,所以我也这么做了。

努力:我已经使用AbsoluteLayout构建了相当令人满意的所有JPanels和JFrames UI。问题是,我的“编程老手”朋友在检查UI时说使用AbsoluteLayout绝对是不可接受的,而在这个论坛和Oracle Java指南上快速查看也得到了类似的看法。我个人尝试过使用BorderLayout和FlowLayout混合呈现我的UI,尽管这是一个相当麻烦的过程,我宁愿不去尝试。

问题: 我可以使用GroupLayout(也称为Free Design)吗?我注意到对于初学者来说,借助Netbeans的帮助很容易使用(只需拖放,没有太多限制),或者它也有显著的缺点吗?如果用它来设计UI而不是标准的Border、Flow、Grid布局,是否会被看作是轻视或者廉价的方式? 注: 值得一提的是,JFrame是无装饰的,我不打算给用户最大化或调整窗口大小的能力(我知道这既残忍又懒惰)。
谢谢您的帮助!
我的当前Gui采用AbsoluteLayout:

https://istack.dev59.com/3lXe2.webp

在考虑使用Grouplayout之前,我尝试了一种混合使用Flow和Borderlayout的GUI。

https://istack.dev59.com/wKmAE.webp


4
GroupLayout 只能与 GUI 构建器一起使用,而这将代码锁定在特定的 IDE 中(例如,Netbeans GUI 构建器与 Eclipse GUI 构建器不兼容)。因此,在使用 GroupLayout 之前,我需要问自己一个重要的问题:是否有其他程序员或者我在另一个 IDE 上尝试理解或更新这个代码?顺便说一下:请提供 ASCII 图形或简单绘图来说明所需的 GUI 布局。 - Andrew Thompson
我已更新帖子,并附上了整体预期布局的图片。在我的尝试中,我使用了 Flow 和 Border。我在 JFrame 上使用了 border,并在东侧放置了一个 NavyColor JPanel,以及一个标准白色 JPanel 来填补其余空间(我认为在中心位置),但当涉及到添加 JPanels 和 JLabels 时,它变得非常困难。如果能提供有关选择布局的一般规则也会很感激,例如我读过 flow 通常适用于多个元素的水平放置,我尝试使用 box 进行垂直放置,但它只是填满了所有空间... - swang
1个回答

1
使用布局管理器的目的是让您逻辑地思考如何分组所有组件以及当框架调整大小时这些组件应如何反应。即使此应用程序可能不会调整大小,您也需要了解此信息以备将来之需。
然后,通常通过从JFrame的默认BorderLayout开始并创建具有不同布局管理器的子面板来完成布局。您还可以嵌套面板以获得所需的布局。
因此,请首先阅读布局管理器上的Swing教程,了解每个布局管理器的基础知识。
所以我看到:
  1. 您可以从一个JPanel开始,将其添加到BorderLayout.LINE_START。该面板可以使用垂直BoxLayout。然后,您可以在每组组件之间添加"glue"来提供间距,并在组内每个组件之间添加"vertical strut"。

  2. 然后创建另一个名为“center”的面板,再次使用BorderLayout,并将此面板添加到BorderLayout.CENTER。该面板将有3个子面板:

  3. 向“center”面板添加一个面板到BorderLayout.PAGE_START。该面板可能使用水平BoxLayout或FlowLayout。

  4. 向“center”面板添加一个面板到BorderLayout.CENTER。该面板可以使用GridBagLayout。

  5. 向“center”面板添加一个面板到BorderLayout.PAGE_END。该面板将使用GridLayout。

是的,在你设计GUI的前几次中会花费更多时间,但从长远来看,这是值得的,因为你将花费时间学习Java / Swing,而不是学习如何使用IDE。无论使用哪个IDE,您的代码都将是可维护的,而不是依赖于特定的IDE。使用IDE来帮助调试等,但不要让它生成任何依赖于IDE的代码。


非常感谢您详细的回复(以及关于我应该如何操作布局的建议,正是我所需要的),也感谢您没有因为这样一个琐碎的问题而严厉批评我。我希望我的布局操作技能会随着时间的推移得到提高,我一定会仔细阅读Swing教程! - swang

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接