Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Unix.docx
Скачиваний:
3
Добавлен:
01.03.2025
Размер:
1.91 Mб
Скачать

10.1. Менеджер расположения

Апплет может содержать такие элементы управления, как кнопки, флажки, раскрывающиеся списки и т.д. Подробнее об этом будет сказано ниже. Однако, прежде чем переходить к описанию синтаксиса этих элементов, необходимо рассмотреть понятие "менеджер расположения".

Для различных компьютеров трудно заранее предсказать точные координаты того места, где должен находится элемент управления. Действительно, если бы положение элементов управления жестко задава­лось в абсолютных координатах, то при запуске в Windows 95 с дисплеем 640x480 апплета, рассчитанного на X-терминал с разрешением 1280x1024, получилось бы неизвестно что. Поэтому размещением элементов управления в апплете занимается менеджер расположения, которому программист только указывает, как те

или иные элементы должны быть расположены по отношению к другим элементам. Точные значения координат вычисляет сам менеджер. Существуют пять различных типов менеджеров расположения:

  1. Flow Layout (последовательное расположение). Располагает элементы последовательно слева направо, пока они помещаются в одном ряду. Затем переходит на следующий ряд, и так далее. Этот менеджер установлен в апплете по умолчанию.

  2. Grid Layout (табличное расположение). Представляет контейнер как таблицу, состоящую из клеток одинакового размера. Располагает элементы в клетках таблицы, начиная с левого верхнего угла и продолжая вправо и вниз, подобно последовательному расположению. Различие между последо­вательным и табличном расположением состоит в том, что при табличном расположении четко задается число элементов в строке (или столбце), а всем элементам отводятся клетки одинаковой формы и размера.

  3. Border Layout (полярное расположение). Рассматривает апплет как лимб компаса. При добавлении нового элемента менеджеру расположения сообщается, что элемент следует поместить в одну из пяти областей: "север" (North), "юг" (South), "запад" (West), "восток" (East) и "центр" (Center). В каждой области может быть не более одного элемента. Точные координаты вычисляются, исходя из относительных размеров элементов.

  4. Card Layout (блокнотное расположение). Все элементы, входящие в контейнер, рассматриваются как странички блокнота. В каждый данный момент видна только одна из страничек.

  5. Grid Bag Layout (ячеистое расположение). Наиболее универсальный менеджер расположения и в то же время наиболее запутанный. Менеджер Grid Bag Layout разделяет контейнер на клетки равного размера, как и GridLayout. Отличие GridBagLayout состоит в том, что он сам определяет, сколько требуется строк и столбцов, а также позволяет элементу занимать при необходимости более одной клетки. Область, занимаемая элементом, называется его ячейкой (display area). Прежде чем добавить элемент в апплет, надо задать менеджеру GridBagLayout набор "пожеланий" насчет того, где следует размещать элемент. Эти пожелания выдаются в форме объекта GridBagConstraints, который имеет следующие свойства:

  • gridx и gridy. Координаты клетки, куда будет помещен следующий элемент (если он будет занимать более одной клетки, это координаты левой верхней занимаемой клетки). Левый верхний угол в объекте GridBagLayout имеет координаты (0, 0). По умолчанию переменные gridx и gridy имеют значение GridBagConstraints.RELATIVE. Для gridx это означает клетку непосредственно справа от последнего добавленного элемента, а для gridy — клетку, примыкающую к последнему элементу снизу.

  • gridwidth и gridheight. Число клеток, которое занимает компонент по горизонтали и вертикали. По умолчанию оба эти значения равны 1. Если требуется, чтобы компонент был последним в строке, следует задать gridwidth равным GridBagConstraint.REMAINDER (тоже самое для gridheight означало бы, что компонент является последним в столбце). Если компонент должен стоять предпоследним в строке или столбце, следует задать GridBagConstraint.RELATiVE.

  • fill. Сообщает как поступить, если элемент меньше, чем предоставленная ему ячейка. По умол­чанию используется значение GridBagConstraint.NONE, которое оставляет размер элемента без изменений. GridBagConstraint .horizontal заставляет растянуть элемент по горизонтали до размеров ячейки, без изменения вертикального размера. GridBagConstraint.VERTiCAL заставляет растянуть элемент по вертикали до размеров ячейки без изменения горизонтального размера. GridBagConstraint.BOTH указывает, что элемент следует растянуть в обоих направлениях до размеров ячейки.

  • ipadx и ipady. Указывает, сколько пикселов добавить к размерам компонента по осям х и у. Добавление происходит с каждой стороны элемента, так что параметр ipadx, равный 4, приведет к увеличению размера элемента на четыре пиксела вправо и на четыре влево. По умолчанию используется значение 0.

  • insets. Экземпляр класса Insets. Указывает, сколько места нужно оставить между границами элемента и краями ячейки. Другими словами, параметр insets создает "демаркационную линию", окружающую элемент. В примере, приведенном ниже, создается экземпляр класса Insets с отступами в 20 пикселей со всех сторон: Insets mylnsets = new Insets (20,20,20,20);

  • anchor. Используется тогда, когда размеры элемента меньше размеров его ячейки. Этот параметр указывает, где должен располагаться элемент в пределах ячейки. По умолчанию применяется GridBagConstraint.CENTER (разместить в центре), но есть еще несколько значений: GridbagConstraints.NORTH (север), GridBagConstraints.NORTHEAST (северо-восток), GridBagConstraints.EAST (восток), GridBagConstraints.SOUTHEAST (юго-восток), GridBagConstraints.SOUTH (юг), GridBagConstraints.SOUTHWEST (юго-запад), GridBagConstraints.WEST (запад), GridBagConstraints.NORTHWEST (северо-запад).

  • weightx и weighty. Применяются для задания относительных размеров элементов. Например, элемент с параметром weightx, равным 2.0, занимает по горизонтали вдвое большее пространство, чем элемент с weightx, равным 1.0. Поскольку это относительные значения, неважно, имеют ли

все элементы значение параметров 1.0 или 3.0. Следует задать эти параметры хотя бы для одного компонента по каждому из направлений, так как иначе менеджер GridBagLayout сожмет все компоненты к центру апплета.

Примеры задания менеджеров расположения:

FlowLayout myManager = new FlowLayout( ); // создание менеджера типа FlowLayout

FlowLayout myManager = new FlowLayout(FlowLayout.RIGHT,10,5); /* создание менеджера FlowLayout,

выравнивание по правому краю, расстояние между элементами по горизонтали - 10 пикселей, вертикали - 5 пикселей */ setLayout (myManager); // активизация менеджера myManager

GridLayout myManager = new GridLayout (0, 4); // 4 колонки для элементов, число строк - автоматически GridLayout myManager = new GridLayout (4, 0); // 4 строки для элементов, число колонок - автоматически GridLayout myManager = new GridLayout (4, 2); /* 4 строки для элементов, число колонок игнорируется и

определяется автоматически */ GridLayout myManager = new GridLayout (4, 0, 10, 5); /* расстояние между элементами по горизонтали - 10

пикселей, вертикали - 5 пикселей */ setLayout (myManager); // активизация менеджера myManager

BorderLayout myManager = new BorderLayout ( ); // создание менеджера типа BorderLayout BorderLayout myManager = new BorderLayout (10,5); /* установка менеджера BorderLayout, промежуток

между элементами по горизонтали - 10, по вертикали - 5 пикселей. */ Button myButton = new Button ("Нажми меня"); // создание кнопки myButton setLayout (myManager); // активизация менеджера myManager

this.add(myButton, myManager.CENTER); // добавление кнопки myBtton в апплет (this), в область "Центр"

GridBagLayout myManager = new GridBagLayout( ); // создание менеджера типа GridBagLayout Button myButton = new Button("Hажми меня"); // создание кнопки myButton setLayout(myManager); // активизация менеджера myManager

GridBagConstraints ogranichenie = new GridBagConstraints( ); // создание объекта ограничений ogranichenie.weightx = 1.0; // описание ограничений

ogranichenie.gridwidth = GridBagConstraints.RELATIVE; // описание ограничений ogranichenie.fill = GridBagConstraints.BOTH; // описание ограничений

myManager.setConstraints(myButton, ogranichenie ); // активизация ограничений для кнопки myButton this.add (myButton); // добавление кнопки myButton в апплет

Все приведенные выше менеджеры расположения - это классы, описанные в пакете AWT. Существуют также и другие менеджеры расположения. Например, в пакете com.borland.jbcl.layout, поставляемом вместе со средой разработки Jbilder, описан менеджер расположения XYLayout, который позволяет самостоятельно задавать размеры и координаты элементов:

import com.borland.jbcl.layout.*; // импорт пакета, содержащего менеджер расположения

XYLayout myManager = new XYLayout( ); // создание нового менеджера расположения this.setLayout(myManager); // активизация менеджера для апплета (this)

myManager.setWidth(283); myManager.setHeight(261); // ширина и высота окна менеджера

Button myButton = new Button("Knopka"); // создание кнопки с надписью Knopka

this.add ( myButton, new XYConstraints (128, 191, 123, 25) ); // добавление кнопки в координаты X:Y=128:191

// и с размером кнопки 123 на 25 пикселей

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]