Второй способ ожидания завершения процесса загрузки изображений связан с интерфейсом ImageObserver. Определение этого интерфейса не занимает много места, поэтому мы приведем его полностью:
public interface java.awt.image.ImageObserver
{
// -------------------------------------------------------
// Биты флагов для параметра infoflags метода imageUpdate
// -------------------------------------------------------
public final static int ABORT;
public final static int ALLBITS;
public final static int ERROR;
public final static int FRAMEBITS;
public final static int HEIGHT;
public final static int PROPERTIES;
public final static int SOMEBITS;
public final static int WIDTH;
// -------------------------------------------------------
// Метод imageUpdate
// -------------------------------------------------------
public abstract boolean
imageUpdate(Image img, int infoflags, int x, int y,
int width, int height);
}
Как видите, в интерфейсе ImageObserver определен единственный метод imageUpdate и набор битовых флагов для этого метода.
Класс Component, от которого происходит класс Applet, реализует интерфейс ImageObserver:
public abstract class java.awt.Component
extends java.lang.Object
implements java.awt.image.ImageObserver
{
. . .
}
Этот интерфейс используется для отслеживания процесса загрузки и перерисовки изображений и других компонент, расположенных внутри компонента. В частности, он используется для отслеживания загрузки и рисования растровых изображений в окне аплета, чем мы и воспользуемся.
В процессе загрузки вызывается метод imageUpdate, поэтому чтобы отслеживать загрузку изображений, наш аплет должен переопределить этот метод.
Процедура ожидания загрузки изображений достаточно проста.
Прежде всего, аплет должен передать в последнем параметре методу drawImage ссылку на интерфейс ImageObserver, который будет применяться для отслеживания процесса загрузки:
g.drawImage(Img, x, y, width, height, this);
|
Флаг |
Описание |
|
WIDTH |
Изображение загружено настолько, что стала доступна его ширина. Значение ширины изображения можно получить из параметра w метода imageUpdate |
|
HEIGHT |
Аналогично предыдущему, но для высоты изображения. Высоту изображения можно получить из параметра h метода imageUpdate |
|
PROPERTIES |
Стали доступны свойства изображения, которые можно получить методом getProperty класса Image. В нашей книге мы опустили описание этого метода |
|
SOMEBITS |
Стали доступны биты изображения для рисования в масштабе. Через параметры x, y, h и w передаются координаты и размеры прямоугольной области, которая ограничивает загруженную часть изображения |
|
FRAMEBITS |
Загружен очередной фрейм изображения, состоящего из нескольких фреймов. Параметры x, y, h и w следует игнорировать |
|
ALLBITS |
Изображение загружено полностью. Параметры x, y, h и w следует игнорировать |
|
ERROR |
При загрузке произошла ошибка |
|
ABORT |
Загрузка изображения была прервана или отменена |