Re: Displaying Images
- From: Ed Tidwell <ed_dash_tidwell_@xxxxxxxxxxxxxxxx>
- Date: Sat, 24 Feb 2007 00:13:24 -0500
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
.
- References:
- Displaying Images
- From: Sean C.
- Displaying Images
- Prev by Date: Re: Removing "All Files" option from FileType of JFileChooser
- Next by Date: Problem JComboBox Editable getInputMap
- Previous by thread: Re: Displaying Images
- Next by thread: Re: Displaying Images
- Index(es):