0

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

4

2 回答 2

2

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

特别参考 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;
于 2010-03-19T18:07:45.167 回答
0

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

于 2010-03-19T23:54:05.040 回答