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.