Метод imageUpdate
Метод 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);
Здесь в качестве ссылки на интерфейс ImageObserver мы передали значение this. При этом будет применен интерфейс нашего аплета. Соответственно, нам нужно определить в классе аплета метод imageUpdate, который будет вызываться в процессе загрузки изображений.
Ниже мы привели возможный вариант реализации этого метода:
public boolean imageUpdate( Image img, int flags, int x, int y, int w, int h) { // Проверяем, все ли // биты изображения загружены fAllLoaded = ((flags & ALLBITS) != 0);
// Если все, перерисовываем окно if(fAllLoaded) repaint();
// Если все биты загружены, // дальнейшие вызовы // метода imageUpdate не нужны return !fAllLoaded; }
Через первый параметр img методу imageUpdate передается ссылка на изображение, загрузка которого отслеживается.
Параметр flags отражает состояние процесса загрузки.
Через остальные параметры x, y, w и h передаются, соответственно, координаты и размеры изображения.
Основное, что должен делать метод imageUpdate для отслеживания процесса загрузки - это проверять флаги flags, дожидаясь установки нужных флагов.
Флаги определены следующим образом:
public final static int WIDTH; public final static int HEIGHT = 2; public final static int PROPERTIES = 4; public final static int SOMEBITS = 8; public final static int FRAMEBITS = 16; public final static int ALLBITS = 32; public final static int ERROR = 64; public final static int ABORT = 128;
Ниже мы привели краткое описание перечисленных флагов.
Флаг | Описание |
WIDTH | Изображение загружено настолько, что стала доступна его ширина. Значение ширины изображения можно получить из параметра w метода imageUpdate |
HEIGHT | Аналогично предыдущему, но для высоты изображения. Высоту изображения можно получить из параметра h метода imageUpdateimageUpdate |
PROPERTIES | Стали доступны свойства изображения, которые можно получить методом getProperty класса Image. В нашей книге мы опустили описание этого метода |
SOMEBITS | Стали доступны биты изображения для рисования в масштабе. Через параметры x, y, h и w передаются координаты и размеры прямоугольной области, которая ограничивает загруженную часть изображения |
FRAMEBITS | Загружен очередной фрейм изображения, состоящего из нескольких фреймов. Параметры x, y, h и w следует игнорировать |
ALLBITS | Изображение загружено полностью. Параметры x, y, h и w следует игнорировать |
ERROR | При загрузке произошла ошибка |
ABORT | Загрузка изображения была прервана или отменена |
Если вам нужно только дождаться завершения процесса загрузки, достаточно использовать флаг ALLBITS. Для проверки ошибок воспользуйтесь флагами ERROR и ABORT.