import java.awt.*;
import java.awt.event.*;
import java.awt.image.BufferedImage;
import java.net.URL;
public class Utilities {
private static final Component sComponent = new Component() {};
private static final MediaTracker sTracker = new MediaTracker(sComponent);
private static int sID = 0;
public static boolean waitForImage(Image image) {
int id;
synchronized(sComponent) { id = sID++; }
sTracker.addImage(image, id);
try { sTracker.waitForID(id); }
catch (InterruptedException ie) { return false; }
if (sTracker.isErrorID(id)) return false;
return true;
}
public static Image blockingLoad(String path) {
Image image = Toolkit.getDefaultToolkit().getImage(path);
if (waitForImage(image) == false) return null;
return image;
}
public static Image blockingLoad(URL url) {
Image image = Toolkit.getDefaultToolkit().getImage(url);
if (waitForImage(image) == false) return null;
return image;
}
public static BufferedImage makeBufferedImage(Image image) {
return makeBufferedImage(image, BufferedImage.TYPE_INT_RGB);
}
public static BufferedImage makeBufferedImage(Image image, int imageType) {
if (waitForImage(image) == false) return null;
BufferedImage bufferedImage = new BufferedImage(
image.getWidth(null), image.getHeight(null),
imageType);
Graphics2D g2 = bufferedImage.createGraphics();
g2.drawImage(image, null, null);
return bufferedImage;
}
public static Frame getNonClearingFrame(String name, Component c) {
final Frame f = new Frame(name) {
public void update(Graphics g) { paint(g); }
};
sizeContainerToComponent(f, c);
centerFrame(f);
f.setLayout(new BorderLayout());
f.add(c, BorderLayout.CENTER);
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) { f.dispose(); }
});
return f;
}
public static void sizeContainerToComponent(Container container,
Component component) {
if (container.isDisplayable() == false) container.addNotify();
Insets insets = container.getInsets();
Dimension size = component.getPreferredSize();
int width = insets.left + insets.right + size.width;
int height = insets.top + insets.bottom + size.height;
container.setSize(width, height);
}
public static void centerFrame(Frame f) {
Dimension screen = Toolkit.getDefaultToolkit().getScreenSize();
Dimension d = f.getSize();
int x = (screen.width - d.width) / 2;
int y = (screen.height - d.height) / 2;
f.setLocation(x, y);
}
} |