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г.
Домен продается

Популярное

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

Карта сайта: 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

Друзья сайта



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

Roberto Waltman:

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

Опрос

Какой аудио плеер Вы используете?

Winamp
Light Alloy
foobar2000
Apollo
AIMP
1by1
iTunes
jetAudio
Другой...