Class ScalableImageIcon
- java.lang.Object
-
- javax.swing.ImageIcon
-
- com.nomagic.ui.ScalableImageIcon
-
- All Implemented Interfaces:
ResizableIcon
,java.io.Serializable
,java.lang.Cloneable
,javax.accessibility.Accessible
,javax.swing.Icon
- Direct Known Subclasses:
DoubleSizeImageIcon
,ResizableIconImageIcon
@OpenApiAll public class ScalableImageIcon extends javax.swing.ImageIcon implements ResizableIcon
HiDPI(Retina) friendly ImageIcon implementation.
This class dynamically chooses a right image by current screen dpi and/or scaling factor defined in the system (Retina and etc). If scaling is needed and svg icon with the same name is available at given location, svg icon will be used instead of a bitmap icon.
Dynamic choosing will work only if two icons are provided at the same location. For example:
- /com/product/icons/a.png
- /com/product/icons/a.svg
ScalableImageIcon(Product.class, "/com/product/icons/a.png") will load a.png on a regular dpi monitor, but a.svg will be loaded on HiDPI monitor. Keep in mind that svg icon size can be any. Svg icon will be re-sized according to the size of a.png icon and scaling factor. For example if size of a.png is 16x16 and scaling factor is 2, loaded svg icon will be re-sized to 32x32 if needed.
Original icon will be loaded and scaled if svg icon is not provided, but HiDPI with scaling is used.
Icon image loading is lazy. Image will be loaded only if icon is painted, getImage() is called or icon width/height is retrieved.
- See Also:
- Serialized Form
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description (package private) class
ScalableImageIcon.AbstractImageLoader
private class
ScalableImageIcon.ByteArrayIconLoader
private class
ScalableImageIcon.ImageLoader
private class
ScalableImageIcon.MultiResolutionImageLoader
private class
ScalableImageIcon.RetinaImageLoader
private class
ScalableImageIcon.ScaledImageLoader
-
Field Summary
Fields Modifier and Type Field Description private ResizableIcon
icon
private ScalableImageIcon.AbstractImageLoader
loader
private java.lang.Object
LOADER_SYNCHRONIZER
private java.lang.String
location
private java.net.URL
url
-
Constructor Summary
Constructors Constructor Description ScalableImageIcon()
ScalableImageIcon(byte[] imageData)
Load icon from given bytes.ScalableImageIcon(byte[] imageData, java.net.URI uri)
Load icon from given bytes.ScalableImageIcon(java.awt.Image image)
Wrap given image and use it for painting.ScalableImageIcon(java.awt.Image image, ResizableIcon icon)
Create icon with given image and give icon to be used for paintingScalableImageIcon(java.lang.Class clazz, java.lang.String location)
Load icon from a resources of given class.ScalableImageIcon(java.lang.Class clazz, java.lang.String location, boolean silent)
Load icon from a resources of given class.ScalableImageIcon(java.net.URL url)
Load icon from a given url.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description java.lang.Object
clone()
Returns cloned instance of this icon.static ScalableImageIcon
create(java.lang.String fileName)
Load icon from a file.private ScalableImageIcon.ImageLoader
createImageLoader()
void
doNotScale()
Do not scale this icon by screen dpi.int
getIconHeight()
int
getIconWidth()
java.awt.Image
getImage()
java.lang.String
getLocation()
java.net.URL
getURL()
(package private) ResizableIcon
internalGetIcon()
(package private) void
internalSetLoader(ScalableImageIcon.AbstractImageLoader loader)
(package private) java.awt.Image
internalSuperGetImage()
private void
loadIcon()
void
paintIcon(java.awt.Component c, java.awt.Graphics g, int x, int y)
void
paintIcon(java.awt.Component c, java.awt.Graphics g, int x, int y, int w, int h)
Draw the icon in the given bounds.private static java.lang.String
resolveQualifiedLocation(java.lang.String name, java.lang.Class clazz)
Resolve name to a qualified for a given classvoid
setImage(java.awt.Image image)
static ScalableImageIcon
toImageIcon(ResizableIcon icon)
Convert given icon to a ImageIcon.static ScalableImageIcon
toImageIcon(ResizableIcon icon, int width, int height)
Convert given icon to a ImageIcon of given width and height.static ScalableImageIcon
toImageIcon(javax.swing.Icon icon)
Convert given icon to a ImageIcon.
-
-
-
Field Detail
-
LOADER_SYNCHRONIZER
private final java.lang.Object LOADER_SYNCHRONIZER
-
location
@CheckForNull private java.lang.String location
-
url
private java.net.URL url
-
loader
@CheckForNull private transient ScalableImageIcon.AbstractImageLoader loader
-
icon
@CheckForNull private transient ResizableIcon icon
-
-
Constructor Detail
-
ScalableImageIcon
ScalableImageIcon()
-
ScalableImageIcon
ScalableImageIcon(java.awt.Image image, @CheckForNull ResizableIcon icon)
Create icon with given image and give icon to be used for painting- Parameters:
image
- icon imageicon
- icon for painting
-
ScalableImageIcon
public ScalableImageIcon(java.awt.Image image)
Wrap given image and use it for painting.- Parameters:
image
- image
-
ScalableImageIcon
public ScalableImageIcon(byte[] imageData)
Load icon from given bytes.- Parameters:
imageData
- image bytes
-
ScalableImageIcon
public ScalableImageIcon(byte[] imageData, java.net.URI uri)
Load icon from given bytes.- Parameters:
imageData
- image bytesuri
- uri describing the bytes (format and etc)
-
ScalableImageIcon
public ScalableImageIcon(java.net.URL url)
Load icon from a given url.- Parameters:
url
- url
-
ScalableImageIcon
public ScalableImageIcon(java.lang.Class clazz, java.lang.String location)
Load icon from a resources of given class.- Parameters:
clazz
- classlocation
- resources location relative to a given class
-
ScalableImageIcon
public ScalableImageIcon(java.lang.Class clazz, java.lang.String location, boolean silent)
Load icon from a resources of given class.- Parameters:
clazz
- classlocation
- resources location relative to a given classsilent
- if true, does not report to log file about missing icon at given location
-
-
Method Detail
-
create
@CheckForNull public static ScalableImageIcon create(java.lang.String fileName)
Load icon from a file.- Parameters:
fileName
- file name
-
resolveQualifiedLocation
@CheckForNull private static java.lang.String resolveQualifiedLocation(java.lang.String name, java.lang.Class clazz)
Resolve name to a qualified for a given class
-
paintIcon
public void paintIcon(java.awt.Component c, java.awt.Graphics g, int x, int y)
- Specified by:
paintIcon
in interfacejavax.swing.Icon
- Overrides:
paintIcon
in classjavax.swing.ImageIcon
-
paintIcon
public void paintIcon(@CheckForNull java.awt.Component c, java.awt.Graphics g, int x, int y, int w, int h)
Description copied from interface:ResizableIcon
Draw the icon in the given bounds. Icon implementations may use the Component argument to get properties useful for painting, e.g. the foreground or background color.- Specified by:
paintIcon
in interfaceResizableIcon
- Parameters:
c
- the given component.g
- the graphics to paint on.x
- x coordinate.y
- y coordinate.w
- width to paint.h
- height to paint.
-
getIconHeight
public int getIconHeight()
- Specified by:
getIconHeight
in interfacejavax.swing.Icon
- Overrides:
getIconHeight
in classjavax.swing.ImageIcon
-
getIconWidth
public int getIconWidth()
- Specified by:
getIconWidth
in interfacejavax.swing.Icon
- Overrides:
getIconWidth
in classjavax.swing.ImageIcon
-
internalGetIcon
@CheckForNull ResizableIcon internalGetIcon()
-
internalSetLoader
void internalSetLoader(ScalableImageIcon.AbstractImageLoader loader)
-
setImage
public void setImage(@CheckForNull java.awt.Image image)
- Overrides:
setImage
in classjavax.swing.ImageIcon
-
getImage
public java.awt.Image getImage()
- Overrides:
getImage
in classjavax.swing.ImageIcon
-
internalSuperGetImage
java.awt.Image internalSuperGetImage()
-
loadIcon
private void loadIcon()
-
getLocation
@CheckForNull public java.lang.String getLocation()
- Returns:
- location of resource if icon is loaded from resources of some class. Null otherwise
-
getURL
public java.net.URL getURL()
- Returns:
- url if icon is loaded from url. Null otherwise
-
clone
public java.lang.Object clone()
Description copied from interface:ResizableIcon
Returns cloned instance of this icon.- Specified by:
clone
in interfaceResizableIcon
- Overrides:
clone
in classjava.lang.Object
- Returns:
- cloned instance.
-
doNotScale
public void doNotScale()
Do not scale this icon by screen dpi. This methods has effect only if ScalableImageIcon was just created and image was not loaded yet.
-
toImageIcon
@CheckForNull public static ScalableImageIcon toImageIcon(@CheckForNull ResizableIcon icon, int width, int height)
Convert given icon to a ImageIcon of given width and height. Same icon is returned if it is already ImageIcon and has same size.- Parameters:
icon
- icon to convertwidth
- icon widthheight
- icon height- Returns:
- converted icon or same icon if it is already suitable
-
toImageIcon
@CheckForNull public static ScalableImageIcon toImageIcon(@CheckForNull javax.swing.Icon icon)
Convert given icon to a ImageIcon. Same icon is returned if it is already ImageIcon.- Parameters:
icon
- icon to convert- Returns:
- converted icon or same icon if it is already suitable
-
toImageIcon
@CheckForNull public static ScalableImageIcon toImageIcon(@CheckForNull ResizableIcon icon)
Convert given icon to a ImageIcon. Same icon is returned if it is already ImageIcon.- Parameters:
icon
- icon to convert- Returns:
- converted icon or same icon if it is already suitable
-
createImageLoader
private ScalableImageIcon.ImageLoader createImageLoader()
-
-