代码之家  ›  专栏  ›  技术社区  ›  ivan_ivanovich_ivanoff

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

  •  1
  • ivan_ivanovich_ivanoff  · 技术社区  · 16 年前

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

    诸如字体和边框之类的东西,以及诸如按钮之类的子元素 不要

    你怎么认为, 实现可伸缩组件的好方法是什么?

    编辑: 我说的是调整 整个布局 组件。比如一个可视化的UML编辑器,请想一想。

    我的选择是:

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

    可能的问题:

    • 样板代码;
    • 有必要提供组件附加自定义属性的访问权限;
    • 不是代码中组件的直接(不一致)表示。
    • 还有别的事吗?
    4 回复  |  直到 16 年前
        1
  •  1
  •   kdgregory    16 年前

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

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

        2
  •  1
  •   Erich Kitzmueller    16 年前

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

    这用于在不进行任何手动设置的情况下生成可调整大小的表单,即仅通过为每个组件指定x/y/长度/宽度来定义表单(无进一步的对齐信息)。

        3
  •  0
  •   Rastislav Komara    16 年前

        4
  •  0
  •   Tim Cooper    13 年前

    我开始了一个类似的解决方案,它在不接触原始布局的情况下运行良好。

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

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