Назад
Вперед
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).
Рис. 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.
Назад Вперед |