Re: Displaying Images
To: comp.lang.java.gui
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
---
* Synchronet * The Whitehouse BBS --- whitehouse.hulds.com --- check it out free usenet!
--- Synchronet 3.15a-Win32 NewsLink 1.92
Time Warp of the Future BBS - telnet://time.synchro.net:24