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 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 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.