Электронная библиотека книг Александра Фролова и Григория Фролова.
Shop2You.ru Создайте свой интернет-магазин
Библиотека
Братьев
Фроловых
[Назад]

Библиотека примеров приложений Java

Оглавление
Режим FlowLayout
Режим GridLayout
Режим BorderLayout
Режим CardLayout
GridBagLayout -  пример 1
GridBagLayout - заполнение формы
Инструментальная линейка
Панели
Точное размещение компонент
Прилипчивая кнопка

Назад Вперед

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).

pic1.gif (3293 bytes)

Рис. 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());
  }
}  

Назад Вперед

[Назад]