Eine SPI Implementierung kann für ein IFrame und ein IComposite
Wrapper zur Verfügung stellen. Diese können mit Hilfe der
IWidgetWrapperFactory
erzeugt werden, welche
man mit Hilfe der folgenden Methode vom Toolkit erhält:
IWidgetWrapperFactory getWidgetWrapperFactory();
Die Schnittstelle IWidgetWrapperFactory
hat
die folgenden Methoden:
boolean isConvertibleToFrame(final Object uiReference); IFrame createFrame(final Object uiReference); boolean isConvertibleToComposite(final Object uiReference); IComposite createComposite(final Object uiReference);
Mit Hilfe der Methoden isConvertibleTo...()
kann geprüft werden, ob für ein natives Widget ein Wrapper für
ein IFrame oder ein IComposite erzeugt werden kann. Die create()
Methoden erzeugen einen konkreten Wrapper.
Achtung: Die folgenden Punkte sollten dabei unbedingt beachtet werden:
Wenn man ein IFrame oder ein IComposite aus einem nativen
Widget wie zum Beispiel einem JFrame
(Swing), Shell
(swt),
JPanel
(Swing),
Composite
(Swt) erzeugt, dann wird auf
dem Wrapper nicht
automatisch dispose aufgerufen, wenn das native Widget
disposed wird. Das liegt daran, dass es nicht für jedes UI
Framework ein Dispose Konzept gibt. Während ein Swt
Composite disposed wird, sobald man es aus seinem Container
entfernt, kann ein JPanel beliebig wiederverwendet werden,
nachdem man es aus seinem Container entfernt hat. Es liegt
daher in der Verantwortung des Entwicklers zu entscheiden,
ob und wann der Wrapper disposed werden soll. Die SPI
Implementierung für SWT liefert jedoch im Addon Modul
org.jowidgets.spi.impl.swt.addons
die
Utility Klasse SwtToJoWrapper
, welche
genau dieses Problem für den Standardfall löst.
Ein Jowidgets Wrapper Widget hat keinen Parent, wenngleich einer gesetzt werden kann.
Man sollte auf der UI Referenz, die man wrapped , keine zusätzlichen modifizierenden nativen Operation wie zu Beispiels dem Hinzufügen oder Entfernen von Kind Controls durchführen. Stattdessen sollte man eine eigene UI Referenz, welche ausschließlich dem Wrappen dient, erzeugen, eventuell durch das Verschachteln von JPanel’s oder Composite’s.