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

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

Оглавление
Растровые изображения в аплете

Растровые изображения в автономном приложении
Класс MediaTracker
Класс ImageObserver
Создание изображений
Фильтр RGBImageFilter
Фильтр CropImageFilter
Полупрозрачные изображения
Класс PixelGrabber
Внеэкранное изображение

Назад Вперед

9.2. Растровые изображения в автономных приложениях

Пример показывает простейший способ рисования растрового изображения в окне автономного приложения Java.

Исходный текст примера

Архив проекта для Java WorkShop 2.0

Немного теории

В предыдущем разделе мы говорили, что для загрузки файлов растровых изображений аплеты применяют метод getImage, определенный в класса Applet:

Image img;
img = getImage(getCodeBase(), "cdroms.jpg");

Однако автономным приложениям Java этот способ недоступен.

Автономные приложения должны создавать объекты класса Image на базе файлов следующим образом:

Image img;
String szFilePath = . . .;
img = Toolkit.getDefaultToolkit().getImage(
  szFilePath);

Здесь мы вначале получаем ссылку на интерфейс Toolkit, а затем вызываем метод getImage. В качестве параметра методу getImage следует передать полный путь к файлу загружаемого изображения.

Есть также вариант метода getImage, способный создавать объекты класса Image, заданные своим адресом URL. В качестве параметра такому методу необходимо передать ссылку на объект URL с адресом файла изображения.

Данная методика позволяет работать с растровыми изображениями формата JPG и GIF.

Описание примера

Наше автономное приложение создает окно на базе класса Frame и рисует в нем растровое изображение из файла cdroms.gif (рис. 1).

pic1.gif (46706 bytes)

Рис. 1. Растровое изображение в окне автономного приложения Java

Файл растрового изображения должен находится в текущем рабочем каталоге. Более сложный пример, допускающий выбор просматриваемого файла при помощи стандартной диалоговой панели, вы найдете в разделе "7.11. Загрузка и просмотр файлов растровых изображений".

Рассмотрим исходный текст примера.

Главный класс ConsImage

Статический метод main, определенный в главном классе нашего приложения, создает окно на базе класса FrameWindow и отображает его методом setVisible:

import java.io.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;

public class ConsImage
{
  public static void main(String args[])
  {
    FrameWindow frame;
    frame = 
      new FrameWindow("Image Viewer");
    frame.setVisible(true);
  }
}

Класс FrameWindow

Мы создали класс FrameWindow на базе класса Frame, реализовав в нем интерфейс WindowListener:

class FrameWindow extends Frame
  implements WindowListener
{
  . . .
}

Данный интерфейс используется для завершения работы приложения при попытке пользователя закрыть главное окно программы.

В классе FrameWindow мы определили единственное поле img класса Image:

Image img;

В этом поле хранится ссылка на изображение, загруженное из файла.

Конструктор класса FrameWindow

На первом шаге конструктор класса FrameWindow вызывает конструктор базового класса Frame, передавая ему заголовок окна, а затем устанавливает размеры окна:

super(szTitle);
setSize(400, 300);

Далее он подключает обработчик событий, связанных с операциями над окном:

this.addWindowListener(this);

Затем конструктор получает системные свойства, определяет путь к рабочему каталогу и файлу с изображением:

Properties p = System.getProperties();
    
String szFilePath = 
  p.getProperty("user.dir") +  
  File.separator + "cdroms.jpg";

Далее конструктор создает объект класса Image:

img = Toolkit.getDefaultToolkit().getImage(
  szFilePath);
Метод paint класса FrameWindow

Этот метод, получающий управление при перерисовке окна нашего приложения, устроен очень просто:

public void paint(Graphics g)
{
  g.drawImage(img, 10, 30, this);
  g.drawString("CDROMS.JPG", 15, 50);  
}

Вначале он рисует изображение методом drawImage, а затем надписывает на нем имя файла.

Метод windowClosing класса FrameWindow

Метод windowClosing реализован нами в рамках интерфейса WindowListener:

public void windowClosing(WindowEvent e)
{
  setVisible(false);
  System.exit(0);
}

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

Другие методы класса FrameWindow

В классе FrameWindow мы определили еще несколько пустых методов:

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) {}

Они нужны только для полноты реализации интерфейса WindowListener.


Назад Вперед

[Назад]