小编典典

我应该避免在 Java Swing 中使用 set(Preferred|Maximum|Minimum)Size 方法吗?

all

我曾多次因建议使用以下方法而受到批评:

  1. 设置首选大小
  2. 设置最小尺寸
  3. 设置最大尺寸

Swing组件上。当我想定义显示组件之间的比例时,我看不到它们的任何替代方法。我被告知:

对于布局,答案总是一样的:使用合适的 LayoutManager

我在网上搜索了一点,但我没有找到任何关于该主题的全面分析。所以我有以下问题:

  1. 我应该完全避免使用这些方法吗?
  2. 定义这些方法是有原因的。那么我应该什么时候使用它们呢?在什么情况下?出于什么目的?
  3. 使用这些方法的负面后果到底是什么?(我只能考虑在不同屏幕分辨率的系统之间增加可移植性)。
  4. 我认为任何 LayoutManager 都不能完全满足所有所需的布局需求。我真的需要为我的布局上的每一个小变化实现一个新的 LayoutManager 吗?
  5. 如果 4 的答案是“是”,这会不会导致 LayoutManager 类的泛滥,从而变得难以维护?
  6. 在我需要定义组件的子级之间的比例的情况下(例如,child1 应该使用 10% 的空间,child2 40%,child3 50%),是否可以在不实现自定义 LayoutManager 的情况下实现这一点?

阅读 104

收藏
2022-03-13

共1个答案

小编典典

  1. 我应该完全避免使用这些方法吗?

是的,适用于应用程序代码。

  1. 定义这些方法是有原因的。那么我应该什么时候使用它们呢?在什么情况下?出于什么目的?

我不知道,我个人认为这是一个 API 设计事故。受到对子尺寸有特殊想法的复合组件的轻微强制。“稍微”,因为他们应该使用自定义 LayoutManager
来实现他们的需求。

  1. 使用这些方法的负面后果到底是什么?(我只能考虑在不同屏幕分辨率的系统之间增加可移植性。)

一些(不完整,不幸的是,由于 SwingLabs 迁移到 java.net
导致链接中断)技术原因在规则(呵呵)或在他/她对我的回答的评论中找到的链接@bendicott
中提到。在社交方面,将大量工作交给你不幸的人,他们必须维护代码并必须追踪损坏的布局。

  1. 我认为任何 LayoutManager 都不能完全满足所有所需的布局需求。我真的需要为我的布局上的每一个小变化实现一个新的 LayoutManager 吗?

是的,有足够强大的 LayoutManager 可以很好地满足“所有布局需求”的近似值。三巨头是 JGoodies
FormLayout、MigLayout、DesignGridLayout。所以不,实际上,除了简单的高度专业化的环境之外,您很少编写
LayoutManager。

  1. 如果 4 的答案是“是”,这会不会导致 LayoutManager 类的泛滥,从而变得难以维护?

(对 4 的回答是“否”。)

  1. 在我需要定义组件的子级之间的比例的情况下(例如,子级 1 应该使用 10% 的空间,子级 2 40%,子级 3 50%),是否可以在不实现自定义 LayoutManager 的情况下实现这一目标?

三巨头中的任何一个都可以,甚至 GridBag 都不能(从不费心真正掌握,太麻烦了,太少了功率)。

2022-03-13