【问题标题】:Swing: What is a good way to implement fully-scalable components?Swing:实现完全可扩展组件的好方法是什么?
【发布时间】:2009-06-23 10:39:38
【问题描述】:

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

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

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

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

我的选择是:

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

可能的问题:

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

【问题讨论】:

  • “可扩展”是什么意思?您是指重新调整大小的组件吗?
  • 您是否正在考虑如何进行布局以使组件缩放或实际上是您自己的可缩放自定义组件?
  • 谈到缩放,我很确定他的意思是调整整个布局的大小,包括所有组件。想想 Flash。
  • 你能给我们提供一张截图/概念图吗?可能有助于了解您的意图。
  • 我不能。请考虑诸如具有缩放功能的可视化 UML 编辑器之类的东西。

标签: java user-interface swing layout scaling


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 我想对大多数组件使用 Swing,所以我不能只是按比例“绘制”它们(看起来很难看)。
      • 我们彼此不了解。我只是指出你对可视化 UML 编辑器的理由。
      【解决方案4】:

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

      就这么简单:

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

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

      【讨论】:

        猜你喜欢
        • 2011-07-08
        • 2013-03-01
        • 2010-11-25
        • 1970-01-01
        • 2010-09-29
        • 1970-01-01
        • 2014-08-23
        • 1970-01-01
        相关资源
        最近更新 更多