001 package org.springframework.richclient.widget;
002
003 import org.springframework.core.io.Resource;
004
005 import javax.swing.*;
006 import java.io.IOException;
007
008 /**
009 * ImageViewingWidget generates a component to view an image.
010 *
011 * {@inheritDoc}
012 *
013 * @see #setImage(javax.swing.ImageIcon)
014 * @see #setImage(org.springframework.core.io.Resource)
015 */
016 public class ImageViewWidget extends AbstractWidget
017 {
018 private JLabel imageHolder;
019 private JComponent mainComponent;
020 private boolean hasContent;
021
022 public ImageViewWidget()
023 {
024 this.imageHolder = new JLabel();
025
026 // below is a small lie to make sure we provide a blank control in case
027 // people create us without ready content
028 this.hasContent = true;
029
030 this.mainComponent = imageHolder;
031 }
032
033 public ImageViewWidget(Resource resource)
034 {
035 this();
036 setImage(resource);
037 }
038
039 public ImageViewWidget(ImageIcon image)
040 {
041 this();
042 setImage(image);
043 }
044
045 /**
046 * Sets the image content of the widget based on a resource
047 *
048 * @param resource
049 * points to a image resource
050 */
051 public void setImage(Resource resource)
052 {
053 ImageIcon image = null;
054 if (resource != null && resource.exists())
055 {
056 try
057 {
058 image = new ImageIcon(resource.getURL());
059 }
060 catch (IOException e)
061 {
062 logger.warn("Error reading resource: " + resource);
063 throw new RuntimeException("Error reading resource " + resource, e);
064 }
065 }
066 setImage(image);
067 }
068
069 /**
070 * Sets the image content based on an ImageIcon
071 *
072 * @param image
073 * The image icon to be shown
074 */
075 public void setImage(ImageIcon image)
076 {
077 this.imageHolder.setIcon(image);
078 this.hasContent = (image != null);
079 }
080
081 public JComponent getComponent()
082 {
083 return this.hasContent ? this.mainComponent : new JPanel();
084 }
085 }