Назад
5.10. "Прилипчивая" кнопка
Пример демонстрирует использование
абсолютного позиционирования компонент для
динамического изменения их расположения.
Исходный текст примера
Архив проекта для Java WorkShop 2.0
Демонстрация
(ваш браузер должен уметь работать с аплетами
Java JDK 1.1)
Немного теории
Еще одно применение для абсолютного
позиционирования компонент, о котором мы
рассказали при описании предыдущего примера,
связано с динамическим изменением расположения
компонент во время работы приложения.
Описание примера
Сразу после запуска аплета в центре его окна
появляется кнопка с названием Yellow. Как только вы
поднесете курсор мыши в к окну аплета, эта кнопка
"прыгнет" на него и в дальнейшем будет
следовать за курсором мыши, как привязанная.
Нажав на кнопку, вы измените цвет фона окна на
желтый, причем надпись на кнопке изменится на White
(рис. 1).
Рис. 1. Окно аплета с "прилипчивой" кнопкой
Нажимая на кнопку, вы сможете менять цвет фона с
белого на желтый и обратно. Если же вывести
курсор мыши за пределы окна аплета, кнопка
останется стоять на месте.
Рассмотрим исходный текст аплета.
Главный класс аплета ButtonGo
Главный класс нашего алпета создан на базе
класса Applet:
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
public class ButtonGo extends Applet
implements ActionListener,
MouseMotionListener, MouseListener
{
. . .
}
Дополнительно он реализует три интерфейса -
ActionListener (обработка событий от кнопки), MouseMotionListener
(отслеживание перемещений курсора мыши) и MouseListener
(отслеживание нажатий на кнопку мыши).
В классе ButtonGo мы определили несколько полей:
Button btn;
int btnX = 0;
int btnY = 0;
Dimension dm;
boolean bYellow = false;
Поле btn хранит ссылку на кнопку.
В полях btnX и btnY находятся текущие координаты
курсора мыши.
Поле dm содержит размеры окна аплета.
Поле bYellow - флаг цвета фона. Если в этом поле
хранится значение true, фон желтый, если false - белый.
Метод init
Прежде всего метод init создает кнопку:
btn = new Button("Yellow");
Далее он отключает систему Layout Manager и добавляет
кнопку в окно методом add:
setLayout(null);
add(btn);
Для кнопки и мыши назначаются обработчики
событий:
btn.addActionListener(this);
this.addMouseMotionListener(this);
this.addMouseListener(this);
На следующем шаге метод init определяет размеры
окна аплета и устанавливает начальное
расположение кнопки - в центре этого окна:
dm = getSize();
btnX = dm.width / 2;
btnY = dm.height / 2;
Метод paint
Метод paint очень прост. Он устанавливает новое
расположение кнопки в соответствии с
координатами, хранящимися в полях btnX и btnY:
public void paint(Graphics g)
{
btn.setBounds(btnX, btnY, 70, 25);
}
Метод actionPerformed
Когда пользователь нажимает на кнопку, метод
actionPerformed проверяет и инвертирует флаг bYellow:
public void actionPerformed(ActionEvent e)
{
if(e.getSource().equals(btn))
{
if(!bYellow)
{
setBackground(Color.yellow);
bYellow = true;
btn.setLabel("White");
}
else
{
setBackground(Color.white);
bYellow = false;
btn.setLabel("Yellow");
}
}
}
Если на момент проверки этот флаг был
установлен, выбирается белый цвет фона, вслед за
чем флаг сбрасывается, а если сброшен -
устанавливается желтый цвет фонаю В поле bYellow при
этом записывается значение true.
Метод mouseMoved
При перемещении курсора мыши метод mouseMoved
устанавливает новое расположение для кнопки, а
затем перерисовывает окно аплета:
public void mouseMoved(MouseEvent e)
{
btnX = e.getX() - 30;
btnY = e.getY() - 12;
repaint();
}
Остальные методы
В исходном тексте определены и другие методы
как часть соответствующих интерфейсов:
public void mouseDragged(MouseEvent e)
{
}
public void mousePressed(MouseEvent e)
{
}
public void mouseReleased(MouseEvent e)
{
}
public void mouseClicked(MouseEvent e)
{
}
public void mouseEntered(MouseEvent e)
{
}
public void mouseExited(MouseEvent e)
{
}
Однако эти методы не используются нашим
приложением.
Назад |