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

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

Оглавление
Кнопки Button

Кнопки с графикой и анимацией
Кнопка в виде аплета
Переключатели класса Checkbox
Переключатели с зависимой фиксацией
Нестандартные переключатели
Списки класса Choice
Списки класса List
Поля класса Label
Поля класса TextField
Поля класса TextArea
Нестандартные текстовые поля
Кнопки и события в JDK 1.1

Линейки Scrollbar

Окно ScrollPane

Назад Вперед

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

pic1.gif (3440 bytes) Рис. 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){}

Определив эти методы, мы можем обрабатывать события, связанные с открытием и закрытием окна, с его минимизацией и восстановлением размеров, с активизацией и деактивацией.


Назад Вперед

[Назад]