WebClub - Всероссийский Клуб Веб-разработчиков
WebClub.RU » Архив » КАК ОРГАНИЗОВАТЬ ИНТЕРФЕЙС

КАК ОРГАНИЗОВАТЬ ИНТЕРФЕЙС


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

Интерфейс состоит из компонент, помещенных в контейнеры. Как размещать компоненты друг относительно друга внутри контейнера? Обычный подход, принятый во многих системах, заключается в задании координат компонент в контейнере и их размеров, например, в пи кселях. Недостатком такой модели расположения является ее "жесткость" - элементы интерфейса будут рисоваться там, где их первоначально расположили и с теми размерами, которые задали, независимо от содержимого, а оно, увы, может сильно разниться на разных платфомах - скажем, размеры шрифтов могут отличаться, а из-за этого надписи могут "вылазить" за пределы компонента и т.п. В общем, результаты могут быть непредсказуемы. Очевидно, что необходима некая подпрограмма (а в Java это, естественно, класс), авто матически подстраивающая, регулирующая расположение и размеры элементов интерфейса так, чтобы в любой системе они выглядели бы более или менее "прилично". Для этого в AWT существуют объекты под общим названием Layout (расположение). Layout управляет тем, как компоненты будут располагаться внутри контейнера, следуя определенным принципам. Всего в AWT имеется 5 предопределенных расположений:
· BorderLayout
· CardLayout
· FlowLayout
· GridLayout
· GridBagLayout
Расположения являются прямыми наследниками класса Object и все реализуют интерфейс LayoutManager. Объект типа LayoutManager содержится в классе Container. В классе Container определены 3 метода add, предназначенные для добавления новых компонент в контейнер. Куда именно будет добавлена компонента с помощью метода add, зависит от конкретного типа Layo utManager данного контейнера. Для задания LayoutManager есть метод setLayout.
Примечание: для того, чтобы не пользоваться никаким Layout'ом и задавать расположение компонент в обычных XY-координатах, надо установить LayoutManager для этого контейнера в null, например так:
myPanel.setLayout(null);
Рассмотрим кратко, как работают приведенные выше схемы размещения.
4.3.3.1. BORDERLAYOUT
BorderLayout делит прямоугольный контейнер на 5 прямоугольных областей: север, юг, запад, восток и центр: Компонента добавляется в соответствующую область с помощью метода add (string, component)(или add(component, string));
Пример:
setLayout (new BorderLayout());
buttonN = new Button ("one");
add ("North", buttonN);
// ... добавление остальных кнопок

4.3.3.2. CARDLAYOUT
Контейнер состоит из нескольких плоскостей. В каждый момент наверху только одна плоскость. Таким образом, CardLayout представляет собой как бы блокнот со многими страницами. Страницы помечаются с помощью строк.
setLayout (new CardLayout ());
add ("one", create (new FlowLayout ()));
add ("two", create (new BorderLayout ()));
add ("three", create (new GridLayout (2, 2)));
add ("four", create (new BorderLayout (10, 10)));
add ("five", create (new FlowLayout (FlowLayout.LEFT, 10, 10)));
add ("six", create (new GridLayout (2, 2, 10, 10)));
Метод добавления компонент к контейнеру:
add (string, component);
где string - имя "страницы", а component - добавляемая компонента. Как правило, эти компоненты сами будут контейнерами (страница блокнота вряд ли будет состоять из одной большой кнопки).

4.3.3.3. FLOWLAYOUT
FlowLayout реализует модель построчного заполнения контейнера. После заполнения одной строки начинается следующая. При изменении размеров контейнера происходит перераспределение компонент по строкам. Новые компоненты добавляются в контейнер с помощью метода add (component);
Пример:
setLayout (new FlowLayout ());
add (new Button ("OK"));
add (new Button ("Cancel"));
add (new Button ("Resume"));
Ряды компонент могут быть выровнены вправо, влево, или центрированы.

4.3.3.4. GRIDLAYOUT
Контейнер разбивается на клетки. Для этого задается число строк и столбцов. При добавлении новых компонент, клетки заполняются по строкам. Возможность делать пропуски отсутствует. Новые компоненты добавляются в контейнер с помощью метода add (component);
Пример:
setLayout (new GridLayout (2, 3));
// 2 строки, 3 столбца
add (new Button ("1"));
add (new Button ("2"));
add (new Button ("3"));
add (new Button ("I"));
add (new Button ("II"));

4.3.3.5. GRIDBAGLAYOUT
GridBagLayout позволяет разделить контейнер на неравные прямоугольные области. Это достигается с помощью объединения соседних клеток в клетки большего размера. Кроме того, GridBagLayout позволяет заполнять решетку с пропусками. Конкретный алгоритм заполнения определяется объектом класса GridBagConstraints.
GridBagLayout gridbag = new GridBagLayout ();
GridBagConstraints c = new GridBagConstraints ();
setLayout (gridbag);

// Устанавливаем характеристики
c.fill = GridBagConstraints.BOTH;
c.weightx = 1.0;
. . .
Button button1 = new Button ("1");
gridbag.setConstraints (button1, c);
add (button1);
. . .
// здесь можно изменить некоторые установки
// объекта класса GridBagConstraints,
// например
// c.fill = GridBagConstraints.NONE;
Button buttonX= new Button ("X");
gridbag.setConstraints (buttonX, c);
add (buttonX);

В объектах этого класса имеется более 10 параметров, определяющих размещение следующей компоненты.

Андрей Дуглас 1998г.
Zapravimvse тонер brother.

Популярное

Не так давно в сети появился новый сервис, под названием 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сматриваем цены на каждый сайт в индивидуальном порядке.

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

    Неизвестный автор:

    "На чужой СДЛ рот не разевай, а пинок себе под зад давай и свой делай!"

    Опрос

    Какими социальными сетями Вы пользуетесь?

    Vkontakte.ru
    Одноклассники
    Мой Мир - mail.ru
    Google Plus
    Facebook
    ЖЖ
    Другие
    Не пользуюсь