为什么在Swing中使用空布局不好意思?

最近,我开始为我工作的公司创build一个程序。 就像背景信息一样,我仍然是一名学生和初学者程序员,所以我的解决scheme可能不被推荐,我不知道如何去做,但它的工作原理,我不会因为它而被评判,因为这是一个与编程完全无关的学生工作。

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

该程序是自助服务terminal式的,我首先得到屏幕大小的值,然后从那里(例如,离开我的头顶,左边的菜单占了屏幕的八分之一,顶部的酒吧2%等) 。 我也使用字体指标来确保组件的尺寸正确,并且一切都很好地显示出来。

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

在这样的情况下,更有经验的程序员如何使用布局pipe理器? 当你想要一个button到某个特定的地方,而另一个特定的其他组件与别的预定义的布局不匹配时,你会怎么做?

如果您正确布置布局pipe理器,则屏幕会为您重新生成不同的大小,但想法是在所有屏幕大小上使用一组布局pipe理器。

如果你使用null,你将不得不自己做每个屏幕大小。 不仅如此,如果应用程序可以窗口化,你必须支持他们可能滚动到的每一个可能的大小。

这是一件很难做到的事情,但布局pipe理员的目的是为了做到这一点。

有一些常见的技巧。 BorderLayout是一个很好的布局。 有时你可能在多个层面上使用它 – 通常只有2或3个组件。 那是因为除了一个区域外,其他所有区域都是最好的区域,并且把所有的东西都交给中心。

FlowLayout可以是有用的,但如果你的组件是不同的大小它是棘手的。

我不会尝试GridBagLayout,除非你打算写代码给你的布局pipe理器(一个很好的解决scheme!)。

我也不会使用GUI构build器,他们不知道你想要回stream布局的整体方式。

简而言之,因为上面解释的所有工作都是由布局经理完成的(或至less:应该完成)。

通常情况下,当使用空布局时,也意味着所有位置和大小都被硬编码为单个值,因此根本没有灵活性。 这意味着窗口大小,语言,字体大小,显示密度或任何其他相关参数的变化对布局没有影响,并且会产生通常的丑陋效果:窗口的空白部分; 小小的,不可估量的名单; 标签被切断的button; …

这听起来像你做的工作应该由布局pipe理器来完成。 要么find一个这样做(我个人的build议是MiGLayout ,它做了很多,很容易使用) 写你自己的。

您实际上正在使用一个布局 – 您自己的布局,以及所有复杂的职位计算。

您可以将这些逻辑移到一个自定义的布局pipe理器类来平息批评者。

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