3.14.7. Eigene Icon Bibliotheken mit Hilfe von IImageUrlProvider Enums

Das folgende Beispiel zeigt, wie man sich eine eigenen Icon Bibliothek mit Hilfe einer Image Provider Enum erstellen kann:

  1  import java.net.URL;
  2  import org.jowidgets.common.image.IImageUrlProvider;
  3  
  4  public enum SilkIcons implements IImageUrlProvider {
  5  
  6      ACCEPT(getIconsPath() + "accept.png"),
  7      ADD(getIconsPath() + "add.png"),
  8      ANCHOR(getIconsPath() + "anchor.png"),
  9      APPLICATION(getIconsPath() + "application.png"),
 10      APPLICATION_ADD(getIconsPath() + "application_add.png"),
 11  
 12      //...removed most of the icon constants in this code example
 13  
 14      XHTML_GO(getIconsPath() + "xhtml_go.png"),
 15      XHTML_VALID(getIconsPath() + "xhtml_valid.png"),
 16      ZOOM(getIconsPath() + "zoom.png"),
 17      ZOOM_IN(getIconsPath() + "zoom_in.png"),
 18      ZOOM_OUT(getIconsPath() + "zoom_out.png");
 19  
 20      private static final String ICONS_PATH 
 21          = "org/jowidgets/addons/icons/silkicons/icons/silkicons/";
 22  
 23      private final URL url;
 24  
 25      private SilkIcons(final String defaultPath) {
 26          this.url = getClass().getClassLoader().getResource(defaultPath);
 27      }
 28  
 29      private static String getIconsPath() {
 30          return ICONS_PATH;
 31      }
 32  
 33      @Override
 34      public URL getImageUrl() {
 35          return url;
 36      }
 37  
 38  }

Die Enum implementiert die Schnittstelle IImageUrlProvider, wodurch die Konstanten vor deren Verwendung nicht explizit registriert werden müssen.

Die zugehörigen Icon Dateien sind in diesem Beispiel im resources Ordner des Moduls unter dem Pfad: org/jowidgets/addons/icons/silkicons/icons/silkicons/ abgelegt, wie es die folgende Abbildung verdeutlicht:

Abbildung 36. Icon Resources

Icon Resources

Das folgende Beispiel zeigt, wie die oben definierten Icons verwendet werden können:

  1      final IButton zoomInButton = container.add(BPF.button().setIcon(SilkIcons.ZOOM_IN));
  2      final IButton zoomOutButton = container.add(BPF.button().setIcon(SilkIcons.ZOOM_OUT));

Dieser Ansatz eignet sich sowohl für die Erstellung logischer- als auch für die Erstellung konkreter Icon Bibliotheken.

Anmerkung: Beinhaltet eine konkreten Icon Bibliothek alle Icons einer unter Umständen größeren Icon Sammlung, kann es hilfreich sein, die Enum Klasse mit Hilfe eines Skriptes zu generieren. Für die Silk Icons Bibliothek wurde das so gemacht.


Siehe auch PDF Version dieses Dokuments, Jowidgets API Spezifikation