Loadedimage — это удобный Canvas-подкласс, который берет изображение во время конструирования и синхронно загружает его, используя загрузчик MediaTracker. LoadedImage ведет себя должным образом под управлением менеджера компоновки LayoutManager потому, что он переопределяет методы getPreferredSize() и getMinimumSize(). Он также определяет специальный установочный метод set(). С его помощью можно добиться такого вида нового изображения (Image-объекта), чтобы оно могло отображаться в данном (пустом) окне (Canvas-объекте). Именно так фильтрованное изображение отображается после того, как подключение заканчивается.
// Файл LoadedImage.java
import java.awt.*;
public class LoadedImage extends Canvas {
Image img;
public LoadedImage(Image i) {
set(i);
}
void set(Image i) {
MediaTracker mt = new MediaTracker(this);
mt.addImage(i, 0);
try {
mt.waitForAll ();
}
catch (InterruptedException e) { };
img = i;
repaint();
}
public void paint(Graphics g) {
if (img == null) {
g.drawString("no image", 10, 30);
}
else {
g.drawImage(img, 0, 0, this);
}
}
public Dimension getPreferredSize() {
return new Dimension(img.getWidth(this), img.getHeight(this));
}
public Dimension getMinimumSize() {
return getPreferredSize();
}
}