3.14.6. Icon Bibliotheken

In großen Projekten spart der Einsatz bereits vorhandener Icon Bibliotheken Zeit und somit Geld. Zudem wird gefördert, dass nicht jeder Entwickler eine eigene Instanz eines Image Files erstellt. Man kann (muss aber nicht :-) bei Icon Bibliotheken zwischen logischen und konkreten unterscheiden.

Logische Icon Bibliotheken

Logische Icons beschreiben eher wofür das Icon eingesetzt wird, konkrete Icons eher das, was das Icon abbildet, wobei diese Regel nur als grober Leitfaden, den man nicht zu dogmatisch betrachten sollte, zu verstehen ist. Der logischen Konstante Icons.EDIT könnte man dann zum Beispiel das konkrete Icon IconLib_16x16.PENCIL als Default zuweisen und der logischen Konstante Icons.Save das konkrete Icon IconLib_16x16.DISK. Logische Icon Bibliotheken liefern eher genau die Icons Konstanten, welche für einen bestimmten Modul-, Produkt- oder Firmenkontext relevant sind, inklusive eines konkreten Default Icon dafür.

Verwendet man bei der Erstellung eigener Widget Bibliotheken logische Konstanten, können die Default Icons später leicht durch andere Icons ausgetauscht werden.

Würde man zum Beispiel für den Edit Button in einem firmeninternen Widget die Konstante IconLib_16x16.PENCIL verwenden, anstatt OdzIcons.EDIT [23], dann könnte man dieses nicht so einfach umdefinieren. Angenommen in einem Produkt sollen anstatt der IconLib die SmartIcons verwendet werden, dann würde der folgende Code

  1      registry.registerImageConstant(IconLib_16x16.PENCIL, SmartIcons_16x16.PENCIL);

alle Pencils ändern. Hat man im gleichen Produkte auch eine Komponente zum Zeichnen mit verschiedenen Stiften, könnte dies zu einem unerwünschten Nebeneffekt führen.

Mit dem folgenden Code:

  1      registry.registerImageConstant(OdzIcons.EDIT, SmartIcons_16x16.PENCIL);

würde man nur die Stellen ändern, wo es um Editierung geht.

Der Name der weiter unten beschriebenen Enum IconsSmall wurde bewusst so und nicht etwa Icons_16x16 gewählt. Für bestimmte SPI Implementierungen wie zum Beispiel RWT könnte es durchaus Sinn machen, für diese Icons eine andere Auflösung zu wählen, zum Beispiel wenn man per StyleSheet alles etwas größer darstellt.

Konkrete Icon Bibliotheken

Konkrete Icon Bibliotheken enthalten eher eine große Auswahl vieler unterschiedlicher Icons und dienen dadurch sowohl als Pool möglicher Default Icons bei der Erstellung logischer Icon Bibliotheken, also auch als mögliche Substitute für das Ersetzen der logischen Konstanten verschiedenster Module, zum Beispiel auch zur Vereinheitlichung des Look And Feel.

Im Vergleich zu logischen Icons macht es für konkrete Icons durchaus Sinn, die zugehörigen Enums oder Konstanten entsprechend der Auflösung zu benennen, insbesonderer wenn verschiedene Auflösungen verfügbar sind. Für einen SWT oder Swing Client könnte man folgende Icons der Enum IconsSmall dann zum Beispiel wie folgt Substituieren:

  1      registry.registerImageConstant(IconsSmall.OK, IconLib_16x16.TICK);
  2      registry.registerImageConstant(IconsSmall.EDIT, IconLib_16x16.PENCIL);
  3      registry.registerImageConstant(IconsSmall.REFRESH, IconLib_16x16.RECYCLE);
  4      registry.registerImageConstant(IconsSmall.UNDO, IconLib_16x16.ARROW_UNDO);
  5      registry.registerImageConstant(IconsSmall.CANCEL, IconLib_16x16.CANCEL);
  6      registry.registerImageConstant(IconsSmall.ERROR, IconLib_16x16.ERROR);

Für einen Web Client mit luftigem Layout wie folgt:

  1      registry.registerImageConstant(IconsSmall.OK, IconLib_24x24.TICK);
  2      registry.registerImageConstant(IconsSmall.EDIT, IconLib_24x24.PENCIL);
  3      registry.registerImageConstant(IconsSmall.REFRESH, IconLib_24x24.RECYCLE);
  4      registry.registerImageConstant(IconsSmall.UNDO, IconLib_24x24.ARROW_UNDO);
  5      registry.registerImageConstant(IconsSmall.CANCEL, IconLib_24x24.CANCEL);
  6      registry.registerImageConstant(IconsSmall.ERROR, IconLib_24x24.ERROR);


[23] Odz steht hier für ein (fast:-) frei erfundenes Kürzel der Firma, welches die Icon Bibliothek definiert hat.


Siehe auch PDF Version dieses Dokuments, Jowidgets API Spezifikation