为什么在Swing中使用null布局不赞成?

Ada*_*ith 13 java layout swing layout-manager null-layout-manager

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

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

程序是自助终端风格,我首先得到屏幕尺寸值并从那里开始(例如,从我的头顶,左侧菜单占据屏幕的八分之一,顶部栏2%,等等) .我还使用字体度量来确保组件的大小正确并且所有内容都能很好地显示.

我的问题是:为什么让布局为null而不是使用布局管理器是如此不满?(我在一些论坛上被告知这是一种可怕的做事方式)我知道布局管理器如何工作并知道如何使用不同的布局,但是对于这个程序的要求(多种不同的分辨率,自定义按钮形状和放置) ,当您更改语言时,文本在组件上发生变化等等),我无法看到自己使用布局管理器来完成所有操作.

在这种情况下,你如何让更有经验的程序员使用布局管理器?当你想要一个特定的按钮和其他特定的其他组件并不真正匹配任何预定义的布局时,你会怎么做?

Bil*_*l K 14

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

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

这有点难以做到,但布局经理的设计就是为了做到这一点.

有一些常见的技巧.BorderLayout是一个很好的布局.有时您可能会在多个级别使用它 - 通常只有2或3个组件.那是因为除了一个区域以外,所有区域都是最小的区域,并且为CENTER提供了所有其他功能.

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

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

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


Joa*_*uer 7

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

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

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