WebClub - Всероссийский Клуб Веб-разработчиков
WebClub.RU » Архив » Понятие диспетчеров размещения

Понятие диспетчеров размещения


Дата публикации: 17-03-2013

Любое обсуждение Java GUI было бы незавершенным, если бы в нем не упоминалось о диспетчерах размещения. Для тех из нас, кто занимался пиксельным кодированием графики, мощность диспетчера размещения не имеет аналогов. Определенно, требуется некоторое время, чтобы понять, как работает диспетчер размещения, но обычно он работает достаточно долгое время.

Конечно, некоторые из вас могут думать, что особенного в пиксельном GUI? Только hardcode расположения компонентов и экранов выглядят совершенным. И это правда. Но что происходит, когда вы изменяете размеры вашего приложения? Оно просто не реагирует на это. Нет проблем, вы должны отменить событие resize, правильно? Пробуйте это, чем снова использовать пиксельные вычисления и, используя диспетчер размещения, вы будете в выигрыше. Это происходит потому, что диспетчер размещения предназначен как раз для таких вещей.

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

Далее показано как работает диспетчер размещения:

1. Устанавливается размещение контейнера, чей метод "add()" будет вызван для добавления компонентов.
2. Создаются компоненты и добавляются, используя метод "add()".
3. Перед окраской компонентов, контейнер связывается с диспетчером размещения для позиционирования и сортирования компонентов по величине.

Обратите внимание, что диспетчер размещения не "красит" компоненты. Он просто определяет их позицию и размер. Для этого каждый диспетчер размещения имеет собственный алгоритм. Он может потребовать дополнительного ввода для выполнения своей работы. Например, BorderLayout должен знать, куда должен быть добавлен компонент - в северную, южную части и т.д. Эта дополнительная информация передается через перезагрузку метода "add()". Каждый из методов "add()" добавляет компонент в контейнер и сообщает о нем диспетчеру размещения. В диспетчер размещения он передается для использования или отброса информации. Также обратите внимание, что компонент добавляется в контейнер только один раз. Выполнение множественных вызовов "add()" не будет добавлять компонент несколько раз.

Фактически, java.awt.LayoutManger - интерфейс, который описывает, как взаимодействуют контейнер и диспетчер размещения. Все диспетчеры размещения представляют этот интерфейс. Для вычисления размера диспетчер размещения использует один или несколько методов компонента: getPreferredSize(), getMaximumSize() и getMinimumSize(). После того, как вычислен размер и позиция каждого компонента, диспетчер размещения вызывает один или большее количество методов каждого компонента для завершения процесса размещения: setBounds(), setLocation() и setSize().

Диспетчеры размещения представляют различные "ароматы" и их комбинация может привести к созданию очень гибкого GUI. Стандартные AWT диспетчеры размещения - FlowLayout, BorderLayout, GridLayout, CardLayout и GridBagLayout.

Давайте начнем с простейшего - FlowLayout. Он обеспечивает привилегированный размер всех содержащихся компонентов и поддерживает так много компонентов на строке сколько возможно. Если требуется, то он создает другую строку. Если не хватает памяти для компонентов, они просто не показываются. Это размещение похоже на то, как вы печатаете текст, и именно поэтому называется размещением потока. Следующая программа показывает использование FlowLayout.

import java.awt.*;

/** Demonstrates the use of FlowLayout. */
public class FlowLayoutDemo extends Frame {

/** Initializes the demo. */
public FlowLayoutDemo() {
super("FlowLayout Demo");
}

/** Demonstrates the use of FlowLayout. */
public void demonstrate() {

// Set the layout manager
setLayout(new FlowLayout());

// The GUI components
Label lbl = new Label("Search: ");
TextField name = new TextField("Search string");
Button search = new Button("Search");

// Add the components to the frame
add(lbl);
add(name);
add(search);

// Do the layout
pack();

// Show
setVisible(true);

}

/** Main. */
public static void main(String[] args) {

FlowLayoutDemo fld = new FlowLayoutDemo();
fld.demonstrate();

}

}
Здесь, метод main() запускает demo, вызывая метод demonstrate() объекта demo. Этот метод сначала устанавливает размещение фрейма контейнера для размещения потока. Затем он создает компоненты GUI и добавляет их к фрейму. Обращение к методу pack() осуществляет размещение. В заключение, оно показывает фрейм.
Размещение потока имеет несколько интересных вариантов. Например, вы можете управлять выравниванием компонента в области дисплея. По умолчанию, это центр. Вы можете также изменять горизонтальный и/или вертикальный промежуток между компонентами.

Заданный по умолчанию диспетчер размещения для панели - размещение потока. Это также означает, что заданный по умолчанию диспетчер размещения для апплета - размещение потока, так как java.awt.Applet определяется из java.awt.Panel. Размещение потока - хороший выбор для отображения малого числа компонентов, типа кнопок в диалоговом окне.

Мы обсуждали основы диспетчеров размещения и рассмотрели размещение потока. В следующей статье мы будем говорить о другом популярном диспетчере размещения - BorderLayout.

Популярное

Не так давно в сети появился новый сервис, под названием Dead Man Zero. Этот сервис сделал...
Рынок социальных площадок уже давно стал стабильным. Несмотря на то, что время от времени...
Artisteer 4 – единственный в своем роде продукт, позволяющий автоматизировать работу над созданием...
Март 2017 (1)
Февраль 2017 (3)
Январь 2017 (1)
Август 2016 (1)
Май 2016 (2)
Ноябрь 2015 (1)

Карта сайта: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41

Друзья сайта

Хотите продать свой сайт?
- Мы быстро и удобно для Вас сможем его купить:
  • Заявка на продажу сайта
  • Раcсматриваем цены на каждый сайт в индивидуальном порядке.

    Случайная цитата

    Roberto Waltman:

    "Объектно-ориентированная версия «спагетти кода» — это, конечно, «лазанья код» (очень много слоев)."

    Опрос

    Как Вам новый дизайн сайта?

    Отлично
    Неплохо
    Нормальный
    Ужасно