Назад
Вперед
5.9. Точное размещение компонент
Пример демонстрирует абсолютное
позиционирование компонент внутри контейнера с
определением точных координат расположения в
пикселах.
Исходный текст примера
Архив проекта для Java WorkShop 2.0
Демонстрация
(ваш браузер должен уметь работать с аплетами
Java JDK 1.1)
Немного теории
Если ни один из существующих режимов
размещения компонент системы Layout Manager вас не
устраивает, вы можете либо создать собственную
систему размещения, либо использовать
абсолютное позиционирование компонент. Мы
рассмотрим здесь второй вариант.
При этом нужно сделать две вещи.
Прежде всего, следует отключить систему Layout
Manager таким способом:
setLayout(null);
Далее компоненты добавляются в окно контейнера
как обычно методом add.
Второе, что вы должны сделать, это
предусмотреть в классе контейнера метод paint,
который будет позиционировать компоненты
методом setBounds, например, так:
TextField tf;
. . .
tf.setBounds(20, 20, 200, 25);
Этому методу передаются четыре параметра,
определяющих новое расположение и размеры
компонента:
public void setBounds(
int x, // координата по оси X
int y, // координата по оси Y
int width, // ширина
int height); // высота
Заметим, что абсолютное позиционирование нужно
использовать с осторожностью, так как при
неправильном использовании оно может привести к
ухудшению мобильности приложения Java.
Так как приложения Java обычно работают на разных
компьютерных платформах, следует учитывать, что
размеры компонент, метрики шрифтов и другие
метрические параметры могут изменяться от
платформы к платформе.
Описание примера
В нашем примере мы используем абсолютное
позиционирование для размещения двух полей
редактирования, одной метки класса Label и одной
кнопки (рис. 1).
Рис. 1. Абсолютное позиционирование компонент
Рассмотрим кратко исходный текст аплета.
Метод init
Метод init вначале создает все необходимые
компоненты - текстовые поля, метку и кнопку:
tf = new TextField(30);
btnGetName = new Button("Enter name");
lb = new Label("Your name is: ");
tf2 = new TextField(30);
tf2.setEditable(false);
Далее он отключает систему Layout Manager:
setLayout(null);
После этого компоненты добавляются в окно
алпета методом add:
add(tf);
add(btnGetName);
add(lb);
add(tf2);
На завершающей стадии метод init регистрирует
обработчик событий от кнопки:
btnGetName.addActionListener(this);
Метод paint
Во время рисования окна аплета метод paint
выполняет абсолютное позиционирование
компонент методом setBounds:
public void paint(Graphics g)
{
tf.setBounds(20, 20, 200, 25);
btnGetName.setBounds(160, 50, 70, 25);
lb.setBounds(20, 60, 150, 25);
tf2.setBounds(20, 90, 200, 25);
}
Метод actionPerformed
Когда пользователь нажимает на кнопку, метод
actionPerformed копирует строку из верхнего текстового
поля в нижнее:
public void actionPerformed(ActionEvent e)
{
if(e.getSource().equals(btnGetName))
{
tf2.setText(tf.getText());
}
}
Назад Вперед |