Графические изображения в приложении помогут сделать интерфейс пользователя не только красивым, но и более понятным.
Способ 1. Добавление изображения с помощью JLabel.
Это, вероятно, самый простой способ, но в тоже время не самый гибкий, поскольку в JLabel отсутствуют способы управления положением добавляемого изображения.
Чтобы добавить изображение в JLabel существует метод setIcon(Icon image).
Также это можно сделать во время создания объекта JLabel с помощью конструктора JLabel(String text, Icon icon, int horizontalAlignment).
Преимуществом данного способа, в отличие от следующего, является поддержка анимированных gif изображений.
Способ 2. Добавление изображения с помощью JPanel.
Использование этого способа заключается в создании нового класса (назовем его PicturePanel) в качестве наследника стандартного JPanel. В новом классе реализуется метод setImageFile(File imageFile), который позволяет загрузить изображение из файла и прорисовать его на фоне JPanel.
public void setImageFile(File imageFile)
{
Try
{
if (imageFile == null)
{
originalImage = null;
}
// Читаем файловый поток.
BufferedImage bi = ImageIO.read(imageFile);
originalImage = bi;
}
catch (IOException ex)
{
// В случае ошибки, выводим сообщение.
System.err.println("Не удалось загрузить изображение!");
ex.printStackTrace();
}
// Перерисовываем компонент уже с новым загруженным изображением.
repaint();
}
При изменении размера панели, размеры изображения также меняются, таким образом создается эффект «резинового» изображения, которое «подстраивается» под размеры окна.
// Реакция на изменение размеров панели - изменение размера изображения.
System.err.println("Не удалось загрузить изображение!");
ex.printStackTrace();
}
// Перерисовываем компонент уже с новым загруженным изображением.
repaint();
}
}
Изменение размеров окна приводит к пропорциональному изменению размеров изображения.
Важным преимуществом приведенного метода является возможность добавлять другие контролы (элементы GUI) на созданный объект PicturePanel, т.е. использовать его в качестве компонента-контейнера, добиваясь тем самым достижения эффекта фонового изображения.
Способ 3. Добавление изображения с помощью класса Image.
Простой способ, который заключается в создании объекта Image, а затем его отрисовку с помощью метода drawImage() объекта типа Graphics в методе paint() объекта типа JFrame.
Данный метод хорош тем, что объекты Image можно обрабатывать с помощью фильтров:
• CropImageFilter (int x, int у, int w, int h) — выделяет фрагмент изображения, указанный в приведенном конструкторе;
• RGBimageFilter — позволяет изменять отдельные пикселы; это абстрактный класс, он требует расширения и переопределения своего метода filterRGBO;
• RepдicateScaieFilter (int w, int h) — изменяет размеры изображения на указанные в приведенном конструкторе, дублируя строки и/или столбцы при увеличении размеров или убирая некоторые из них при уменьшении;
• AreaAveragingScaleFilter (int w, int h) — расширение предыдущего класса; использует более сложный алгоритм изменения размеров изображения
Применяются классы-фильтры совместно с классом-поставщиком, реализующим интерфейс ImageProducer — классом FilteredlmageSource. Этот класс преобразует уже готовую продукцию, полученную от другого поставщика producer, используя для преобразования объект filter класса-фильтра imageFilter или его подкласса.