Swing:实现完全可扩展组件的好方法是什么?

时间:2009-06-23 10:39:39

标签: java user-interface swing layout scaling

我正在创建一个具有可滚动和可缩放(可缩放)视图的应用程序。在此视图中,我想放置其他组件(其中大部分是自定义JPanelJInternalFrame s。)

诸如字体和边框之类的内容以及诸如按钮之类的子元素不需要可扩展。只有容器组件的尺寸和位置应该是。

您如何看待,实施可扩展组件的好方法是什么?

编辑:我正在谈论调整整个布局的大小,包括所有 组件。请考虑一些具有缩放功能的可视化UML编辑器。

我的替代方案是:

  • 创建自定义布局管理器;
  • 创建自定义可调整大小的子组件;
  • 创建一个自定义容器,用于调整其子组件的大小;
  • 做点什么吗?

可能出现的问题:

  • Boilerplate代码;
  • 提供对组件的其他自定义属性的访问的必要性;
  • 代码中组件的表示不直接(不一致)。
  • 别的什么?

4 个答案:

答案 0 :(得分:1)

这就是布局管理器存在的原因:它们告诉包含的组件应该在哪里以及它们应该有多大。

既然你在谈论UML编辑器,你是否使用包含的Swing组件来表示图中的各种对象(例如,类的组件)?如果是,那么你就有很多工作要做(虽然这不一定是一个糟糕的方法)。我建议创建一个约束对象,用于标识对象在“单位空间”上的位置,然后乘以当前大小。

答案 1 :(得分:1)

我通过创建自定义布局管理器完成了这项工作。框架上的每个组件(或更确切地说是组件类)都有一个标记,无论是否在调整容器大小时调整大小(例如,调整表格大小,不按钮)。调整容器大小时会移动未调整大小的那些。

这用于制作可调整大小的表单而无需任何手动设置,即通过仅指定每个组件的x / y /长度/宽度来定义表单(无需进一步的对齐信息)。

答案 2 :(得分:0)

如果我将这个问题视为可视化UML编辑器,那么我不得不考虑单个“画布”组件将每个元素绘制为具有基本宽高比和放大/缩小的图形对象。我无法看到父容器中对齐的组件列表的原因。

答案 3 :(得分:0)

我启动了一个类似的解决方案,在没有触及原始布局的情况下工作正常。

这很容易:

// Install scalable layout and CTRL+/CTRL- keys for scaling operations
ScalableLayoutUtils.installScalableLayoutAndKeys(new DefaultScalableLayoutRegistry(),  frame, 0.1);

它仍处于工作状态,但它将很快作为下一个“utils4swing”版本的一部分提供。