Re: Displaying Images



Sean,

This is NOT an easy problem. Especially, if you use WebStart or a different thread/classloader needs to load the resource.

I wrote a Java Application framework about 7 years ago. One of the first utility classes I wrote was something called IconLoader. Feel free to use as needed.

The entire project can be found at:
https://tframe.dev.java.net/

Kind regards,
Ed Tidwell

package net.java.dev.tframe.util;

import java.awt.Frame;
import java.net.URL;

import javax.swing.*;

/**
* This class will load an icon and add it to the control passed in. We will
* add more methods as they are needed to support future controls not currently
* implemented. If an icon is not found an error message is printed to system
* out to inform the caller that the icon was not located.
*
* Currently we have an "icons" directory in our jar file for all icons.
* This directory should exist in your classes directory if your using
* JBuilder to create your jar file. <recommended solution>
*
* Made 2.0 so you do not have to create an instance of IconLoader. Just call
* the static method. This is a LOT more efficient.
*
* Made 3.0 to work with WebStart
*
* @Author Ed Tidwell
* @version 3.0
*/
public final class IconLoader {
// this directory MUST exist in the jar AND
// must contain all your icons
//JBuilder note... Create this directory in your classes directory and
//copy your icons to that location.
public static final String ICON_PATH = "resources/icons/";

/** All methods in this class are static - forces access through class only */
private IconLoader() {}

/**
* This helper method insures we redirect to the class loader that loads us.
* @param iconName path to resources
* @return url to resource
*/
private static URL getURL(String iconName) {
// have to get the class to get to the classLoader that LOADED us.
// this is so we work correctly under WebStart
URL iconURL = Thread.currentThread().getContextClassLoader().
getResource(ICON_PATH + iconName);
return iconURL;
}

/**
* Give the name of an icon to look for and a JButton target for the icon
* IF it is found.
* @param iconName file name
* @param setMe button to set
*/
public static void setIcon(String iconName, JButton setMe) {
URL iconURL = getURL(iconName);
if (iconURL != null) {
setMe.setIcon(new ImageIcon(iconURL));
} else {
System.out.println(iconName + " not found in " + ICON_PATH);
} // if else
} // setIcon for JButton

/**
* Give the name of an icon to look for and a JLabel target for the icon
* IF it is found.
* @param iconName file name
* @param setMe button to set
*/
public static void setIcon(String iconName, JLabel setMe) {
URL iconURL = getURL(iconName);
if (iconURL != null) {
setMe.setIcon(new ImageIcon(iconURL));
} else {
System.out.println(iconName + " not found in " + ICON_PATH);
} // if else
} // setIcon for JButton

/**
* Give the name of an icon to look for and a Frame target for the icon
* @param iconName of file
* @param frame to set icon image against
*/
public static void setIcon(String iconName, Frame frame) {
URL iconURL = getURL(iconName);

if (iconURL != null) {
// set upper left hand corner icon for OS platforms that support it
// child applications can easily override the default
frame.setIconImage(new ImageIcon(iconURL).getImage());
} else {
System.out.println(iconName + " not found in " + ICON_PATH);
} // if else
} // setIcon for JButton

/**
* Given an icon name return the icon.
* @param iconName file name of icon
* @return the icon if it exists. Otherwise, null.
*/
public static ImageIcon getIcon(String iconName) {
URL iconURL = getURL(iconName);

if (iconURL == null) {
System.out.println(iconName + " not found in " + ICON_PATH);
}

return (iconURL == null ? null : new ImageIcon(iconURL));
} // getIcon

} //IconLoader
.


Quantcast