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

我可以在swing中使用一个布局管理器实例吗?

  •  0
  • cesar  · 技术社区  · 14 年前

    我正在使用miglayout,我是个怪胎,我在想是否可以创建一个布局实例并将其用于所有面板?只是好奇…

    2 回复  |  直到 14 年前
        1
  •  2
  •   L. Cornelius Dol    14 年前

    这完全取决于布局管理器是否保留与布局相关的数据。通常,任何接受约束的布局管理器都需要存储这些约束,因此它必须与容器一对一地实例化。

    特别提到miglayout,看看它存储了多少不适用于多个容器的数据:

    public final class MigLayout implements LayoutManager2, Externalizable
    {
        // ******** Instance part ********
    
        /** The component to string constraints mappings.
         */
        private final Map<Component, Object> scrConstrMap = new IdentityHashMap<Component, Object>(8);
    
        /** Hold the serializable text representation of the constraints.
         */
        private Object layoutConstraints = "", colConstraints = "", rowConstraints = "";    // Should never be null!
    
        // ******** Transient part ********
    
        private transient ContainerWrapper cacheParentW = null;
    
        private transient final Map<ComponentWrapper, CC> ccMap = new HashMap<ComponentWrapper, CC>(8);
        private transient javax.swing.Timer debugTimer = null;
    
        private transient LC lc = null;
        private transient AC colSpecs = null, rowSpecs = null;
        private transient Grid grid = null;
        private transient int lastModCount = PlatformDefaults.getModCount();
        private transient int lastHash = -1;
        private transient Dimension lastInvalidSize = null;
    
        private transient ArrayList<LayoutCallback> callbackList = null;
    
        private transient boolean dirty = true;
    
        2
  •  0
  •   Steve Kuo    14 年前

    一些布局管理器只使用一个 Container (如 BoxLayout )。我的猜测是,尝试重用同一个布局管理器并没有什么好处。