Назад
Вперед
3.14. Линейки просмотра Scrollbar и события в JDK 1.1
Пример демонстрирует приемы обработки событий
от линеек просмотра Scrollbar и окна автономного
приложения Java с использованием модели, принятой
в JDK версии 1.1.
Исходный текст примера
Архив проекта для Java WorkShop 2.0
Немного теории
Такой орган управления, как линейка Scrollbar,
хорошо знаком пользователям операционных систем
с графическим интерфейсом. Обычно он применяется
для регулировки каких-либо значений, просмотра
текстов или графических изображений, не
помещающихся полностью в окне приложения.
Приложения Java могут создать орган управления
Scrollbar на базе одноименного класса,
воспользовавшись одним из трех предусмотренных
в этом классе конструкторов. Первый из этих
конструкторов не имеет параметров, второй задает
только ориентацию линейки (горизонтальная или
вертикальная), а третий позволяет указать все
остальные параметры, такие как, например, границы
изменения значения, связанного с линейкой.
В примере, приведенном ниже, мы создаем
вертикально расположенную линейку Scrollbar:
scrlRed = new Scrollbar(Scrollbar.VERTICAL,
0, 10, 0, 255);
Расположение задает первый параметр
конструктора. Другое возможное значение -
Scrollbar.HORIZONTAL. Оно соответствует горизонтальному
расположению линейки.
С линейкой связывается некоторое текущее
значение, изменяющееся от минимальной до
максимальной величины в результате перемещения
пользователем движка линейки. Последние два
параметра конструктора задают эти значения. В
нашем случае оно будет изменяться от 0 до 255.
Второй параметр конструктора задает начальное
значение. У нас оно равно нулю.
Третий параметр определяет шаг изменения
значения, связанного с линейкой просмотра и
равно размеру движка. Когда пользователь
перемещает движок, нажимая клавиши <Page Up> или
<Page Down>, либо щелкая мышью в области между
движком и кнопками линейки просмотра, текущее
значение изменяется как раз на величину этого
шага.
В классе Scrollbar имеется ряд методов, позволяющих
определять и устанавливать текущие параметры
линейки просмотра. Самые важные из них - getValue и
setValue.
Метод getValue возвращает значение, связанное с
линейкой просмотра и зависящее от текущего
расположения движка. Что же касается метода setValue,
то он позволяет динамически изменять все
параметры, задаваемые конструктору класса Scrollbar.
В частности, с его помощью можно передвигать
движок и устанавливать диапазон изменения
значения, связанного с линейкой просмотра.
А как обрабатывать события, связанные с
перемещением движка?
Для этого вы должны предусмотреть в классе
приемника события интерфейс AdjustmentListener. В рамках
этого интерфейса следует определить метод
adjustmentValueChanged, которому в качестве параметра будет
передаваться ссылка на объект-событие класса
AdjustmentEvent:
public void adjustmentValueChanged(
AdjustmentEvent e)
{
. . .
}
Разумеется, класс приемника событий следует
зарегистрировать методом addAdjustmentListener. После
этого в процессе перемещения движка будет
получать управление метод adjustmentValueChanged.
Чтобы определить текущее положение движка, вам
будет нужен метод getValue, определенный в классе
AdjustmentEvent.
Описание примера
Наш пример, так же как и предыдущий, выполнен в
виде автономного приложения Java с использованием
окна класса Frame.
В этом окне мы расположили три линейки Scrollbar,
позволяющие регулировать отдельные компоненты
цвета фона - красную, голубую и зеленую (рис. 1).
|
Рис. 1. Автономное приложение Java с
тремя линейками Scrollbar, изменяющими цвет фона окна |
Рассмотрим исходный текст приложения.
Главный класс приложения
Главный класс нашего автономного приложения Java
выглядит так же, как и в предыдущем примере:
public class SimpleButtonJDK11
{
public static void main(String args[])
{
FrameWindow frame;
frame = new FrameWindow("Frame window");
frame.init();
frame.show();
}
}
Здесь статический метод main, получающий
управление при запуске приложения, создает
главное окно приложения как объект класса FrameWindow.
Этот класс определен в нашем приложении как
дочерний для класса Frame.
Сразу после создания этого окна мы выполняем
его инициализацию методом init и отображение
методом show.
Класс FrameWindow
Этот класс реализует два интерфейса с именами
AdjustmentListener и WindowListener:
class FrameWindow extends Frame
implements AdjustmentListener, WindowListener
{
. . .
}
В рамках интерфейса AdjustmentListener определен метод
adjustmentValueChanged для обработки событий от линеек
просмотра. Интерфейс WindowListener нужен для обработки
событий от окна при его закрытии.
В классе FrameWindow мы определили шесть полей:
Scrollbar scrlRed;
Scrollbar scrlGreen;
Scrollbar scrlBlue;
int nRed = 0;
int nGreen = 0;
int nBlue = 0;
Первые три из них хранят ссылки на линейки
просмотра, отвечающие за регулировку красной,
зеленой и голубой компоненты цвета фона,
соответственно. Текущие значения этих компонент
хранятся в полях nRed, nGreen и nBlue.
Конструктор класса FrameWindow вызывает конструктор
базового класса Frame, а затем устанавливает
размеры окна:
public FrameWindow(String szTitle)
{
super(szTitle);
setSize(150, 400);
}
Метод paint
Для перерисовки окна мы вызываем метод paint
родительского класса Frame:
public void paint(Graphics g)
{
super.paint(g);
}
Метод init
Метод init вызывается статическим методом main,
определенном в главном классе нашего приложения
и выполняет инициализацию окна.
Сразу после запуска он создает в окне три
линейки просмотра класса Scrollbar, задавая для них
вертикальнео расположение:
scrlRed = new Scrollbar(
Scrollbar.VERTICAL, 0, 10, 0, 255);
scrlGreen = new Scrollbar(
Scrollbar.VERTICAL, 0, 10, 0, 255);
scrlBlue = new Scrollbar(
Scrollbar.VERTICAL, 0, 10, 0, 255);
Перед добавлением линеек в окно приложения мы
устанавливаем режим GridLayout:
setLayout(new GridLayout(1, 3, 40, 0));
При этом мы указываем, что компоненты будут
располагаться в таблице, состоящей из одной
строки и трех столбцов, причем между столбцами
необходим зазор размером 40 пикселов.
Далее метод init добавляет линейки:
add(scrlRed);
add(scrlGreen);
add(scrlBlue);
На следующем этапе мы регистрируем класс FrameWindow
как приемник сообщений от линеек просмотра:
scrlRed.addAdjustmentListener(this);
scrlGreen.addAdjustmentListener(this);
scrlBlue.addAdjustmentListener(this);
Мы также регистрируем этот класс для приема
сообщений от окна при его закрытии:
this.addWindowListener(this);
На последнем шаге метод init устанавливает в окне
текущий цвет фона:
setBackground(
new Color(nRed, nGreen, nBlue));
Метод adjustmentValueChanged
Этот метод был нами определен как часть
интерфейса AdjustmentListener. Он получает управление,
когда пользователь изменяет положение движков в
линейках просмотра.
В качестве параметра методу adjustmentValueChanged
передается ссылка на объект класса AdjustmentEvent,
связанного с источником события.
Прежде всего мы проверяем, является ли
полученная нами ссылка объектом класса Scrollbar:
if(e.getSource() instanceof Scrollbar)
{
. . .
}
Если является, мы сохраняем ссылку на
конкретную линейку, вызвавшую появление события,
в переменной scrl:
Scrollbar scrl;
scrl = (Scrollbar)e.getSource();
Текущее значение, связанное с этой линейкой,
извлекается методом getValue и сохраняется в
переменной nValue:
int nValue;
nValue = e.getValue();
Далее мы определяем, на какой линейке был
передвинут движок и изменяем значение
соответствующей цветовой компоненты:
if(scrl.equals(scrlRed))
nRed = nValue;
else if(scrl.equals(scrlGreen))
nGreen = nValue;
else if(scrl.equals(scrlBlue))
nBlue = nValue;
После этого метод устанавливает новый цвет
фона и перерисовывает окно приложения:
setBackground(
new Color(nRed, nGreen, nBlue));
repaint();
Метод windowClosing
Этот метод вызывается, когда пользователь
пытается закрыть окно нашего приложения. В его
задачу входит скрытие окна и завершение работы
виртуальной машины Java:
public void windowClosing(WindowEvent e)
{
setVisible(false);
System.exit(0);
}
Метод windowClosing определен как часть интерфейса
WindowListener.
Другие методы интерфейса WindowListener
Следующие методы необходимо определить как
часть интерфейса WindowListener, несмотря на то что они
ничего не делают в нашем приложении:
public void windowOpened(WindowEvent e){}
public void windowClosed(WindowEvent e){}
public void windowIconified(WindowEvent e){}
public void windowDeiconified(WindowEvent e){}
public void windowActivated(WindowEvent e){}
public void windowDeactivated(WindowEvent e){}
Определив эти методы, мы можем обрабатывать
события, связанные с открытием и закрытием окна,
с его минимизацией и восстановлением размеров, с
активизацией и деактивацией.
Назад Вперед |