16

最近,我开始为我工作的公司创建一个程序。正如背景信息一样,我仍然是一名学生和初学者程序员,所以我的解决方案可能不被推荐,我不知道该怎么做,但它有效,我不会因此而受到评判,因为这是一项与编程完全无关的学生工作。

该程序的问题是,它将在具有不同屏幕尺寸和分辨率(800x600 及以上)的多台不同计算机上运行。为了确保尽可能多地占用屏幕而不丢失程序的任何部分,我将布局设置为空,并使用相对值对所有内容进行硬编码。

该程序是信息亭式的,我首先获取屏幕尺寸值并从那里开始(例如,离开我的头顶,左侧菜单占屏幕的八分之一,顶部栏 2% 等) . 我还使用字体度量来确保组件大小正确,并且所有内容都可以很好地显示。

我的问题是:为什么让布局为空而不是使用布局管理器如此令人不悦?(我在一些论坛上被告知这是一种可怕的做事方式)我知道布局管理器是如何工作的并且知道如何使用不同的布局,但是对于这个程序的要求(多个不同的分辨率、自定义按钮形状和位置) ,更改语言时组件上的文本更改等),我看不到自己使用布局管理器来完成这一切。

在这种情况下,您更有经验的程序员如何使用布局管理器?当您希望按钮位于特定位置而其他组件与任何预定义布局都不匹配时,您会怎么做?

4

4 回答 4

15

如果您正确分层布局管理器,屏幕将为您重新排列为不同的尺寸,我们的想法是在所有屏幕尺寸上使用一组布局管理器。

如果您使用 null,您将必须自己完成每个屏幕尺寸。不仅如此,如果应用程序可以窗口化,您必须支持它们可能滚动到的所有可能大小。

这有点难做到,但布局管理器就是为了做到这一点而设计的。

有一些常见的技巧。BorderLayout 是一个很棒的布局。有时您可能会在多个级别上使用它——通常只有 2 或 3 个组件。那是因为它非常擅长为除一个区域之外的所有区域提供最低要求区域,并将其他所有区域都提供给 CENTER。

FlowLayout 可能很有用,但如果您的组件大小不同,这会很棘手。

我不会尝试 GridBagLayout 除非您打算编写代码来提供您的布局管理器(这是一个很好的解决方案!)。

我也不会使用 GUI 构建器,他们不知道您想要重排布局的整体方式。

于 2011-07-06T06:42:35.920 回答
8

简而言之:因为您在上面解释的所有工作都由布局管理器完成(或至少:应该完成)。

通常情况下,当使用空布局时,它还意味着所有位置和大小都被硬编码为单个值,因此根本没有灵活性。这意味着窗口大小、语言、字体大小、显示密度或任何其他相关参数的更改对布局没有影响,并且您会得到通常的丑陋效果:窗口的空白部分;微小的、不可调整大小的列表;标签被剪掉的按钮;...

听起来您所做的工作应该由布局管理器完成。要么找到一个这样做的(我个人的建议是MiGLayout,它做了很多并且易于使用)编写你自己的。

于 2011-07-06T06:44:06.093 回答
4

您实际上是在使用一个布局 - 您自己的布局,以及您对位置的所有复杂计算。

您可以将这些逻辑移至自定义布局管理器类以安抚批评者。

于 2011-07-06T06:52:19.933 回答
4

嗯,技巧应该是通过混合LayoutMangers和使用嵌套JPanel的数量,每个 JPanel 可能有不同的布局,实际上取决于JComponents的数量,这允许您创建看起来像使用AbsoluteLayout铺设但具有相同外观/针对每个屏幕分辨率和比例(4:3、16:9、16:10)输出到 GUI

于 2011-07-06T07:12:22.103 回答