Могу ли я использовать один экземпляр менеджера компоновки в разгаре? - PullRequest
0 голосов
/ 19 марта 2010

Я использую MiGLayout и являюсь уродом, я думал, можно ли создать один экземпляр макета и использовать его для всех моих панелей? Просто любопытно ...

Ответы [ 2 ]

2 голосов
/ 19 марта 2010

Это полностью зависит от того, хранит ли менеджер макета данные, относящиеся к макету. Как правило, любой менеджер компоновки, который принимает ограничения, должен хранить их, поэтому он должен быть реализован один в один с контейнером.

С особой ссылкой на 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;
0 голосов
/ 20 марта 2010

Некоторые менеджеры компоновки будут работать только с одним Container (например, BoxLayout). Я предполагаю, что от повторного использования одного и того же менеджера компоновки мало пользы.

...