Class FlatSVGIcon

java.lang.Object
javax.swing.ImageIcon
com.formdev.flatlaf.extras.FlatSVGIcon
All Implemented Interfaces:
FlatLaf.DisabledIconProvider, Serializable, Accessible, Icon

public class FlatSVGIcon extends ImageIcon implements FlatLaf.DisabledIconProvider
An icon that loads and paints SVG.
See Also:
  • Field Details

    • loggingEnabled

      private static boolean loggingEnabled
    • svgCacheEnabled

      private static boolean svgCacheEnabled
    • svgCache

      private static final SoftCache<String,com.github.weisj.jsvg.SVGDocument> svgCache
    • svgLoader

      private static final com.github.weisj.jsvg.parser.SVGLoader svgLoader
    • name

      private final String name
    • width

      private final int width
    • height

      private final int height
    • scale

      private final float scale
    • disabled

      private final boolean disabled
    • classLoader

      private final ClassLoader classLoader
    • url

      private final URL url
    • colorFilter

      private FlatSVGIcon.ColorFilter colorFilter
    • document

      private com.github.weisj.jsvg.SVGDocument document
    • dark

      private boolean dark
    • loadFailed

      private boolean loadFailed
    • darkLaf

      private static Boolean darkLaf
  • Constructor Details

    • FlatSVGIcon

      public FlatSVGIcon(String name)
      Creates an SVG icon from the given resource name.

      The SVG attributes width and height (or viewBox) in the tag <svg> are used as icon size.

      If using Java modules, the package containing the icon must be opened in module-info.java. Otherwise, use FlatSVGIcon(URL).

      This is cheap operation because the icon is only loaded when used.

      Parameters:
      name - the name of the SVG resource (a '/'-separated path; e.g. "com/myapp/myicon.svg")
      See Also:
    • FlatSVGIcon

      public FlatSVGIcon(String name, ClassLoader classLoader)
      Creates an SVG icon from the given resource name. The SVG file is loaded from the given class loader.

      The SVG attributes width and height (or viewBox) in the tag <svg> are used as icon size.

      If using Java modules, the package containing the icon must be opened in module-info.java. Otherwise, use FlatSVGIcon(URL).

      This is cheap operation because the icon is only loaded when used.

      Parameters:
      name - the name of the SVG resource (a '/'-separated path; e.g. "com/myapp/myicon.svg")
      classLoader - the class loader used to load the SVG resource
      See Also:
    • FlatSVGIcon

      public FlatSVGIcon(String name, int width, int height)
      Creates an SVG icon from the given resource name with the given width and height.

      The icon is scaled if the given size is different to the size specified in the SVG file.

      If using Java modules, the package containing the icon must be opened in module-info.java. Otherwise, use FlatSVGIcon(URL).

      This is cheap operation because the icon is only loaded when used.

      Parameters:
      name - the name of the SVG resource (a '/'-separated path; e.g. "com/myapp/myicon.svg")
      width - the width of the icon
      height - the height of the icon
      See Also:
    • FlatSVGIcon

      public FlatSVGIcon(String name, int width, int height, ClassLoader classLoader)
      Creates an SVG icon from the given resource name with the given width and height. The SVG file is loaded from the given class loader.

      The icon is scaled if the given size is different to the size specified in the SVG file.

      If using Java modules, the package containing the icon must be opened in module-info.java. Otherwise, use FlatSVGIcon(URL).

      This is cheap operation because the icon is only loaded when used.

      Parameters:
      name - the name of the SVG resource (a '/'-separated path; e.g. "com/myapp/myicon.svg")
      width - the width of the icon
      height - the height of the icon
      classLoader - the class loader used to load the SVG resource
      See Also:
    • FlatSVGIcon

      public FlatSVGIcon(String name, float scale)
      Creates an SVG icon from the given resource name that is scaled by the given amount.

      The SVG attributes width and height (or viewBox) in the tag <svg> are used as base icon size, which is multiplied by the given scale factor.

      If using Java modules, the package containing the icon must be opened in module-info.java. Otherwise, use FlatSVGIcon(URL).

      This is cheap operation because the icon is only loaded when used.

      Parameters:
      name - the name of the SVG resource (a '/'-separated path; e.g. "com/myapp/myicon.svg")
      scale - the amount by which the icon size is scaled
      See Also:
    • FlatSVGIcon

      public FlatSVGIcon(String name, float scale, ClassLoader classLoader)
      Creates an SVG icon from the given resource name that is scaled by the given amount. The SVG file is loaded from the given class loader.

      The SVG attributes width and height (or viewBox) in the tag <svg> are used as base icon size, which is multiplied by the given scale factor.

      If using Java modules, the package containing the icon must be opened in module-info.java. Otherwise, use FlatSVGIcon(URL).

      This is cheap operation because the icon is only loaded when used.

      Parameters:
      name - the name of the SVG resource (a '/'-separated path; e.g. "com/myapp/myicon.svg")
      scale - the amount by which the icon size is scaled
      classLoader - the class loader used to load the SVG resource
      See Also:
    • FlatSVGIcon

      public FlatSVGIcon(URL url)
      Creates an SVG icon from the given URL.

      The SVG attributes width and height (or viewBox) in the tag <svg> are used as icon size.

      This method is useful if using Java modules and the package containing the icon is not opened in module-info.java. E.g. new FlatSVGIcon( getClass().getResource( "/com/myapp/myicon.svg" ) ).

      This is cheap operation because the icon is only loaded when used.

      Parameters:
      url - the URL of the SVG resource
      Since:
      2
      See Also:
    • FlatSVGIcon

      public FlatSVGIcon(URI uri)
      Creates an SVG icon from the given URI.

      The SVG attributes width and height (or viewBox) in the tag <svg> are used as icon size.

      This is cheap operation because the icon is only loaded when used.

      Parameters:
      uri - the URI of the SVG resource
      Since:
      2
      See Also:
    • FlatSVGIcon

      public FlatSVGIcon(File file)
      Creates an SVG icon from the given file.

      The SVG attributes width and height (or viewBox) in the tag <svg> are used as icon size.

      This is cheap operation because the icon is only loaded when used.

      Parameters:
      file - the SVG file
      Since:
      2
    • FlatSVGIcon

      public FlatSVGIcon(InputStream in) throws IOException
      Creates an SVG icon from the given input stream.

      The SVG attributes width and height (or viewBox) in the tag <svg> are used as icon size.

      The input stream is loaded, parsed and closed immediately.

      Parameters:
      in - the input stream for reading an SVG resource
      Throws:
      IOException - if an I/O exception occurs
      Since:
      2
    • FlatSVGIcon

      public FlatSVGIcon(FlatSVGIcon icon)
      Creates a copy of the given icon.

      If the icon has a color filter, then it is shared with the new icon.

      Since:
      2.0.1
    • FlatSVGIcon

      protected FlatSVGIcon(String name, int width, int height, float scale, boolean disabled, ClassLoader classLoader, URL url)
  • Method Details

    • getName

      public String getName()
      Returns the name of the SVG resource (a '/'-separated path).
      Since:
      1.2
    • getWidth

      public int getWidth()
      Returns the custom icon width specified in FlatSVGIcon(String, int, int), FlatSVGIcon(String, int, int, ClassLoader) or derive(int, int). Otherwise -1 is returned.

      To get the painted icon width, use getIconWidth().

      Since:
      1.2
    • getHeight

      public int getHeight()
      Returns the custom icon height specified in FlatSVGIcon(String, int, int), FlatSVGIcon(String, int, int, ClassLoader) or derive(int, int). Otherwise -1 is returned.

      To get the painted icon height, use getIconHeight().

      Since:
      1.2
    • getScale

      public float getScale()
      Returns the amount by which the icon size is scaled. Usually 1.
      Since:
      1.2
    • isDisabled

      public boolean isDisabled()
      Returns whether the icon is pained in "disabled" state.
      Since:
      1.2
      See Also:
    • getClassLoader

      public ClassLoader getClassLoader()
      Returns the class loader used to load the SVG resource.
      Since:
      1.2
    • derive

      public FlatSVGIcon derive(int width, int height)
      Creates a new icon with given width and height, which is derived from this icon.

      If the icon has a color filter, then it is shared with the new icon.

      Parameters:
      width - the width of the new icon
      height - the height of the new icon
      Returns:
      a new icon
    • derive

      public FlatSVGIcon derive(float scale)
      Creates a new icon with given scaling, which is derived from this icon.

      If the icon has a color filter, then it is shared with the new icon.

      Parameters:
      scale - the amount by which the icon size is scaled
      Returns:
      a new icon
    • getDisabledIcon

      public Icon getDisabledIcon()
      Creates a new icon with disabled appearance, which is derived from this icon.

      If the icon has a color filter, then it is shared with the new icon.

      Specified by:
      getDisabledIcon in interface FlatLaf.DisabledIconProvider
      Returns:
      a new icon
    • getColorFilter

      public FlatSVGIcon.ColorFilter getColorFilter()
      Returns the currently active color filter or null.
      Since:
      1.2
    • setColorFilter

      public FlatSVGIcon setColorFilter(FlatSVGIcon.ColorFilter colorFilter)
      Sets a color filter that can freely modify colors of this icon during painting.

      This method accepts a FlatSVGIcon.ColorFilter. Usually you would want to use a ColorFilter created using the ColorFilter(Function) constructor.

      This can be used to brighten colors of the icon:

      icon.setColorFilter( new FlatSVGIcon.ColorFilter( color -> color.brighter() ) );

      Using a filter, icons can also be turned monochrome (painted with a single color):

      icon.setColorFilter( new FlatSVGIcon.ColorFilter( color -> Color.RED ) );

      Note: If a filter is already set, it will be replaced.

      Parameters:
      colorFilter - The color filter
      Since:
      1.2
    • update

      private void update()
    • loadSVG

      static com.github.weisj.jsvg.SVGDocument loadSVG(URL url)
    • loadSVGUncached

      private static com.github.weisj.jsvg.SVGDocument loadSVGUncached(URL url)
    • getIconURL

      private URL getIconURL(String name, boolean dark)
    • hasFound

      public boolean hasFound()
      Returns whether the SVG file was found.
      Returns:
      whether the SVG file was found
    • getIconWidth

      public int getIconWidth()
      Returns the scaled width of the icon.
      Specified by:
      getIconWidth in interface Icon
      Overrides:
      getIconWidth in class ImageIcon
    • getIconHeight

      public int getIconHeight()
      Returns the scaled height of the icon.
      Specified by:
      getIconHeight in interface Icon
      Overrides:
      getIconHeight in class ImageIcon
    • scaleSize

      private int scaleSize(int size)
    • paintIcon

      public void paintIcon(Component c, Graphics g, int x, int y)
      Specified by:
      paintIcon in interface Icon
      Overrides:
      paintIcon in class ImageIcon
    • paintSvg

      private void paintSvg(Graphics2D g, int x, int y)
    • paintSvgError

      private void paintSvgError(Graphics2D g, int x, int y)
    • getImage

      public Image getImage()
      Overrides:
      getImage in class ImageIcon
    • setRenderingHints

      static void setRenderingHints(Graphics2D g)
    • uri2url

      static URL uri2url(URI uri)
    • isDarkLaf

      public static boolean isDarkLaf()
      Checks whether the current look and feel is dark.

      Uses FlatLaf.isLafDark() and caches the result.

      Since:
      1.2
    • lafChanged

      private static void lafChanged()
    • isLoggingEnabled

      public static boolean isLoggingEnabled()
      Since:
      3.4.1
    • setLoggingEnabled

      public static void setLoggingEnabled(boolean loggingEnabled)
      Since:
      3.4.1
    • isSVGDocumentEnabled

      public static boolean isSVGDocumentEnabled()
      Since:
      3.4.1
    • setSVGDocumentEnabled

      public static void setSVGDocumentEnabled(boolean svgCacheEnabled)
      Since:
      3.4.1
    • clearSVGDocumentCache

      public static void clearSVGDocumentCache()
      Since:
      3.4.1