Как я могу заключить компонент в другой контейнер во время выполнения? - PullRequest
0 голосов
/ 16 апреля 2009

То, что я пытаюсь достичь, это в основном функция «Заключить в» Netbeans во время выполнения:

Допустим, у меня есть эта иерархия компонентов:

Container
    Label 1
    Label 2
    Label 3

И я хочу заключить Label 2 так:

Container
    Label 1
    Container
        Label 2
    Label 3

И я также хочу вернуть его, т. Е. Я хочу снова «подтянуть» ярлык, чтобы получить исходную иерархию.

РЕДАКТИРОВАТЬ: Проблема в том, что во время выполнения я знаю только Label 2. Любые другие компоненты (братья и сестры, родители, дети) неизвестны. Это исключает возможность просто восстановить иерархию.

Конечно, я уверен, что могу найти какой-то способ получить эту функциональность путем обхода иерархий компонентов, но мне интересно:

Есть ли лучший способ? Возможно, какой-то служебный класс, обеспечивающий эту функцию инкапсуляции?

РЕДАКТИРОВАТЬ 2: Как получить ограничения макета, которые компонент был первоначально добавлен в контейнер? Мне нужна эта информация, потому что новый контейнер должен использовать те же ограничения. Также при восстановлении исходной иерархии компонент должен повторно использовать свои старые ограничения.

1 Ответ

1 голос
/ 16 апреля 2009

Container s также Component s, поэтому можно заключить Container s в Container s.

Итак, возможно, первое состояние было бы чем-то вроде (псевдокод):

Container container1 = new Container();
Label label1 = new Label();
Label label2 = new Label();
Label label3 = new Label();
container1.add(label1);
container1.add(label2);
container1.add(label3);

Для перехода во второе состояние:

Container container2 = new Container();
container1.remove(label2);
container2.add(label2);
container2.add(container1);

Теперь label2 перемещен в container2, а сам этот контейнер содержится в container1.

И для возврата в исходное состояние:

container2.remove(label2);
container1.add(label1);
container1.remove(container2);

Редактировать

Если нам известно только label2, которое уже содержится в некотором Container, мы можем определить родителя Container, вызвав метод Component getParent().

Применяя это к приведенному выше коду, замените строку для создания container1 следующим:

Container container1 = label2.getParent();

Если вы хотите получить Component s, которые содержатся в Container, можно вызвать метод getComponents(), чтобы получить массив Component s.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...