Jowidgets ist eine API zur Erstellung von graphischen Benutzeroberflächen mit Java.
Der kritische Leser stellt sich nun eventuell die Frage: „Warum noch ein UI Framework, gibt es da nicht schon genug?“
Die Erfahrung bei der Entwicklung von graphischen Oberflächen in unterschiedlichen Unternehmen hat gezeigt, das für viele in Unternehmen typischen Anwendungsfälle oft keine Lösungen in Standard UI Frameworks existieren, und aus dieser Not heraus das Rad für diese immer wieder neu erfunden wird.
                  Hierzu ein kleines Beispiel. In einer Eingabemaske soll in ein
                  Eingabefeld eine Zahl eingegeben werden. Die Eingabe soll
                  validiert werden, und der Nutzer soll ein möglichst für ihn
                  verständliches Feedback bekommen, wenn etwas falsch ist. Für die
                  Eingabe bietet Swing ein JTextField. Dieses
                  liefert aber einen String und keine Zahl zurück, das heißt der
                  Wert muss erst konvertiert werden. Für die Anzeige des
                  Validierungsfeedback könnte man in Swing ein
                  JLabel verwenden. Da man Anwendungsfälle wie
                  die Eingabe von Zahlen, Eingabe eines Datum, Anzeige von
                  Validierungsfehlern, etc. in sehr vielen Softwarehäusern
                  vorfindet, existieren vermutlich auch in jeder dieser
                  firmeninternen UI Bibliothek Widgets wie:
                  InputNumberField,
                  ValidatedInputNumberField,
                  ValidatedDateField,
                  ValidationLabel usw.. Wer sich hier
                  wieder findet oder wer vielleicht selbst
                  schon mal solch ein Widget implementiert oder verwendet hat, für
                  den könnte jowidgets möglicherweise genau das
                        richtige UI Framework sein.
                
         
Im Vergleich zu herkömmlichen Technologien wie Swing, oder JavaFx liefert jowidgets kein eigenständiges Rendering für Basiswidgets [1], sondern lediglich Adapter, welche die jowidgets Widget Schnittstellen implementieren. Dadurch ist es möglich, UI Code, welcher gegen das jowidgets API implementiert wurde, mit quasi jedem Java UI Framework auszuführen. Derzeit existieren Adapter (SPI Implementierungen, siehe Architektur) für Swing, SWT und RWT. Die RWT Implementierung ermöglicht es somit sogar eine jowidgets Applikation als Webapplikation im Browser auszuführen. Eine JavaFx Adapter Implementierung wurde im Rahmen einer Bachelorarbeit prototypisch umgesetzt. Es existieren Bundle Manifeste für OSGi, so dass auch ein Einsatz in Eclipse RCP (siehe Jowidgets und RCP) ohne weiters möglich ist.
Aufbauend auf den Basiswidgets existieren wie bereits weiter oben angedeutet zusätzliche Composite Widgets und Features, welche sich in herkömmlichen UI-Frameworks nicht finden. Zwei davon sollen an dieser Stelle exemplarisch vorgestellt werden.
                  Beispielsweise gibt es ein generisches
                  InputField<VALUE_TYPE>.
                  Dieses hat Methoden wie VALUE_TYPE getValue()
                  oder setValue(VALUE_TYPE value). Für
                  Standarddatentypen wie Integer,
                  Long, Double,
                  Float, Date, etc. existieren
                  bereits Defaultimplementierungen. Im obigen Beispiel würde das
                  Eingabefeld also bereits eine Zahl liefern. Mit Hilfe von
                  Convertern kann aber auch jeder beliebige andere Datentyp
                  unterstützt werden. Für ein InputField lassen
                  sich auch beliebige Validatoren definieren. Zudem kann die UI an
                  ObservableValues
                  gebunden werden.
                
         
                  Für das nächste Feature betrachten wir noch einmal das vorige
                  Beispiel mit dem Eingabefeld von Zahlen. Für die
                  Validierungsausgabe könnte ein ValidationLabel Widget erstellt
                  worden sein, welches Warnungen und Fehler mit entsprechenden Icons
                  und / oder Fehlertext anzeigen kann. Dabei kann man sowohl die
                  Icons als auch die Farbe konfigurieren, weil Kunde A Fehler nur
                  mit dezenten Farben angzeigt bekommen möchte
                  (laut Aussage seiner Mitarbeiter bekommt man von der standardmäßig
                  verwendeten Farbe Augenkrämpfe), Kunde B kann
                  aber Validierungsfehler, die nicht fett und
                  rot angezeigt werden, gar nicht wahrnehmen,
                  was die Applikation für ihn unbrauchbar macht. Stellen wir uns nun
                  weiter vor, diese Eingabefelder und Validierungslabels sind in ein
                  Widget mit dem Namen GenericInputForm
                  eingebettet, welches sowohl von Kunde A als auch von Kunde B
                  verwendet wird, und stellen wir uns weiter vor, dass die
                  verwendeten Widgets noch weitere Konfigurationsattribute haben,
                  dann müssten diese alle auch für das
                  GenericInputForm konfigurierbar sein.
                  Spätestens wenn dieses in ein weiteres Modul eingebettet ist, wird
                  klar, dass dieses Vorgehen schnell unpraktikabel wird.
                
         
In jowidgets ist es u.A. für solche Anwendungsfälle möglich, für jedes beliebige Widget die Defaulteinstellungen global umzudefinieren (siehe dazu Widget Defaults). So könnte man im genannten Beispiel die gleiche Applikation einmal mit roten und einmal mit grauen Validierungslabels ausliefern, ohne dazu die eigentliche Applikation anpassen zu müssen. Mit der gleichen Methode könnte man zum Beispiel auch die Reihenfolge für Buttons in Eingabedialogen anpassen, definieren in welchem Format Datumswerte angezeigt werden sollen, definieren ob Buttons für Speichern und Abbrechen auf jedem Formular oder nur in der Toolbar vorhanden sind, uvm..