1

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

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

您怎么看,实现可扩展组件的好方法是什么?

编辑:我说的是调整整个布局的大小,包括所有组件。请考虑诸如具有缩放功能的可视化 UML 编辑器之类的东西。

我的替代方案是:

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

可能出现的问题:

  • 样板代码;
  • 需要提供对组件的其他自定义属性的访问;
  • 代码中组件的不直接(不一致)表示。
  • 还有什么?
4

4 回答 4

1

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

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

于 2009-06-23T12:05:51.340 回答
1

我通过创建自定义布局管理器来做到这一点。框架上的每个组件(或者更确切地说是组件类)都有一个标记,当容器被调整大小时它是否应该被调整大小(例如,表格被调整大小,按钮不是)。当容器调整大小时,那些未调整大小的将被移动。

这用于在没有任何手动设置的情况下制作可调整大小的表单,即通过为每个组件指定 x/y/length/width 来定义表单(没有进一步的对齐信息)。

于 2009-06-23T12:07:58.747 回答
0

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

于 2009-06-23T12:05:46.723 回答
0

我开始了一个类似的解决方案,它可以在不触及原始布局的情况下正常工作。

就这么简单:

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

它仍在工作中,但很快就会作为下一个“utils4swing”版本的一部分提供。

于 2009-07-18T08:11:24.597 回答