Чтение онлайн

на главную - закладки

Жанры

Программирование на Java

Вязовик Н.А.

Шрифт:

* ALIGN = alignment

* VSPACE = pixels

* HSPACE = pixels; Эти три необязательных атрибута предназначены для того же, что и в теге IMG. ALIGN задает стиль выравнивания апплета, возможные значения: LEFT, RIGHT, TOP, TEXTTOP, MIDDLE, ABSMIDDLE, BASELINE, BOTTOM, ABSBOTTOM.

Следующие два задают ширину свободного пространства в пикселах сверху и снизу апплета ( VSPACE ), а также слева и справа от него ( HSPACE ).

Приведем пример простейшего апплета:

import java.applet.*;

import java.awt.*;

public class HelloApplet extends Applet {

public void init {

add(new Label("Hello"));

}

}

HTML-тег

для него:

<applet code=HelloApplet.class

width=200 height =50>

</applet>

Передача параметров

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

В HTML параметры указываются следующим образом:

<applet code=HelloApplet.class

width=200 height =50>

<param name="text" value="Hello!!!">

</applet>

В апплете значение параметров считывается таким образом:

import java.applet.*;

import java.awt.*;

public class HelloApplet extends Applet {

public void init {

String text = getParameter("name");

add(new Label(text));

}

}

Теперь выводимый текст можно настраивать из HTML.

Интерфейс AppletContext

Доступ к этому интерфейсу из апплета предоставляется методом getAppletContext. С его помощью апплет может взаимодействовать со страницей, откуда он был загружен, и с браузером. Так, именно в этом интерфейсе определен метод getApplet, с помощью которого можно обратиться по имени к другому апплету, находящемуся на той же странице.

Метод showStatus меняет текст поля статуса в окне браузера.

Метод showDocument позволяет загрузить новую страницу в браузер.

Менеджеры компоновки

При размещении компонент в контейнере поначалу всегда кажется удобным задавать их размер и положение явно с помощью метода setBounds.

Однако дальше становятся очевидны недостатки такого подхода. Например, удобно предоставить пользователю возможность изменять размер фрейма, а это означает необходимость перестраивать компоненты. Развитие приложения также может привести к добавлению или удалению компонента, после чего придется пересчитывать координаты оставшихся элементов.

Есть проблемы и другого характера. Мы указывали, что JVM выбирает шрифты из имеющихся в системе. Поэтому под разными платформами они могут оказаться разного размера или наклона. В результате приложение, красиво смотрящееся на машине разработчика, может "поплыть" у клиента. Даже под одной платформой пользователь может сменить системные настройки, вследствие чего внешний вид приложения может измениться не в лучшую сторону.

Все

эти соображения наводят на мысль, что было бы полезно каким-то образом автоматизировать расположение компонентов. Именно для этой цели служат менеджеры компоновки. Их задача – вычислить и установить размер и местоположение компонентов в контейнере. Вообще говоря, они могут использовать следующий набор параметров для своих вычислений:

* размер контейнера;

* начальное положение и размер компонента;

* его порядковый номер в наборе компонентов;

* специальный параметр-ограничитель (constraint), который может быть установлен при добавлении компонента.

В AWT каждый контейнер обладает менеджером компоновки. Если он равен null, то используются явные параметры компонентов. Настоящие же классы менеджеров должны реализовывать интерфейс LayoutManager. Этот интерфейс принимает в качестве constraints строку ( String ). Со временем это было признано недостаточно гибким (фирмы стали разрабатывать и предлагать свои менеджеры, обладающие самой разной функциональностью). Поэтому был добавлен новый интерфейс – LayoutManager2, принимающий в качестве ограничителя constraints.

Рассмотрим работу нескольких наиболее распространенных менеджеров компоновки. Но перед этим отметим общий для них всех факт. Дело в том, что не всегда вся область контейнера подходит для размещения в ней компонент. Например, фрейм имеет рамку и полосу заголовка. В результате его полезная площадь меньше. Поэтому все менеджеры компоновки начинают с обращения к методу getInsets класса Container. Этот метод возвращает значение типа Insets. Это класс, который имеет четыре открытых поля – top, right, bottom, left, значения которых описывают отступы со всех четырех сторон, которые необходимо сделать, чтобы получить область, доступную для расположения компонент.

Класс FlowLayout

Этот менеджер является стандартным для Panel. Он не меняет размер компонент, а только располагает их один за другим в линию, как буквы в строке. Когда заканчивается первая "строка", он переходит на следующую, и так далее, пока либо не закончится область контейнера, либо не будут расположены все компоненты.

В качестве параметров конструктору можно передать значение выравнивания по горизонтали (определены константы LEFT, RIGHT, CENTER – значение по умолчанию), а также величину необходимых отступов между компонентами по вертикали ( vgap ) и горизонтали ( hgap ). Их значение по умолчанию – 5 пикселов.

Рассмотрим пример:

final Frame f = new Frame("Flaw");

f.setSize(400, 300);

f.setLayout(new FlowLayout(FlowLayout.LEFT));

f.add(new Label("Test"));

f.add(new Button("Long string"));

f.add(new TextArea(2, 20));

f.add(new Button("short"));

f.add(new TextArea(4, 20));

f.add(new Label("Long-long text"));

f.setVisible(true);

Если теперь менять размер этого фрейма, то можно видеть, как перераспределяются компоненты:

Поделиться:
Популярные книги

Ловите конский топот. Том 1. Исхода нет, есть только выходы...

Звягинцев Василий Дмитриевич
15. Одиссей покидает Итаку
Фантастика:
альтернативная история
8.24
рейтинг книги
Ловите конский топот. Том 1. Исхода нет, есть только выходы...

Играть... в тебя

Зайцева Мария
3. Звериные повадки Симоновых
Любовные романы:
современные любовные романы
5.25
рейтинг книги
Играть... в тебя

Сексуальная жизнь мужчины. Книга 1

Еникеева Диля Дэрдовна
Дом и Семья:
образовательная литература
здоровье и красота
7.00
рейтинг книги
Сексуальная жизнь мужчины. Книга 1

Зарево горящих деревень

Инин Дмитрий
4. Негодяй Аллара
Фантастика:
фэнтези
рпг
5.00
рейтинг книги
Зарево горящих деревень

Рыцарь Империи

Буревой Андрей
3. Одержимый
Фантастика:
фэнтези
9.39
рейтинг книги
Рыцарь Империи

Больше чем Герой! Том 9

Довыдовский Кирилл Сергеевич
9. Путешествие Героя
Фантастика:
героическая фантастика
юмористическое фэнтези
городское фэнтези
рпг
5.00
рейтинг книги
Больше чем Герой! Том 9

"Фантастика 2023-121". Компиляция. Книги 1-25

Башибузук Александр
Фантастика 2023. Компиляция
Фантастика:
фэнтези
боевая фантастика
5.00
рейтинг книги
Фантастика 2023-121. Компиляция. Книги 1-25

Люсьен Левен (Красное и белое)

Стендаль Фредерик
Проза:
классическая проза
7.00
рейтинг книги
Люсьен Левен (Красное и белое)

Бояръ-Аниме. Газлайтер. Том 35

Володин Григорий Григорьевич
35. История Телепата
Фантастика:
аниме
боевая фантастика
фэнтези
6.40
рейтинг книги
Бояръ-Аниме. Газлайтер. Том 35

Миры Филипа Фармера. Том 4. Больше чем огонь. Мир одного дня

Фармер Филип Хосе
Фантастика:
научная фантастика
5.00
рейтинг книги
Миры Филипа Фармера. Том 4. Больше чем огонь. Мир одного дня

Гримуар темного лорда IV

Грехов Тимофей
4. Гримуар темного лорда
Фантастика:
фэнтези
боевая фантастика
попаданцы
аниме
6.00
рейтинг книги
Гримуар темного лорда IV

Первый Предтеча. Трилогия

Тарс Элиан
Первый Предтеча
Фантастика:
аниме
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Первый Предтеча. Трилогия

Спецоперации. Лубянка и Кремль 1930–1950 годы

Судоплатов Павел Анатольевич
Документальная литература:
биографии и мемуары
5.00
рейтинг книги
Спецоперации. Лубянка и Кремль 1930–1950 годы

Арканарский вор (Трилогия)

Шелонин Олег Александрович
Арканарский вор
Фантастика:
юмористическая фантастика
9.00
рейтинг книги
Арканарский вор (Трилогия)