IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
logo
Sommaire > SWT / JFACE
        Définition de SWT et de JFACE ?
        Quelles sont les différences entre SWT et SWING ?
        Quelles sont les avantages et inconvenients de SWT par rapport à SWING ?
        Quels sont les Widgets SWT ?
        Ou trouver des exemples sur SWT ?
        Comment lancer une application SWT ?
        Comment inclure du Swing dans une application SWT et inversement ?
        Pourquoi mon widget qui hérite d'un widget swt plante a l'execution ?
        Comment packager une application SWT pour java web start ?
        Comment afficher un calendrier ou un selecteur de date en SWT ?
        Comment faire pour avoir une Table SWT plus souple ?

rechercher
precedent    sommaire    suivant    telecharger


Définition de SWT et de JFACE ?
auteur : Lunatix
SWT est une librairie graphique. C'est-à-dire que au même titre que AWT, ou Swing, elle va vous permettre de générer des interfaces graphiques pour vos applications java. La particularité de SWT est de déléguer à la couche graphique du systême d'exploitation sur lequel est executée l'application les fonctions d'affichage. En clair, vous utilisez les MFC, Gtk ou autre à travers SWT.

JFace est une surcouche de SWT. Cette librairie amène une couche plus objet, et des fonctionnalités supplémentaires.


Quelles sont les différences entre SWT et SWING ?
auteur : Lunatix
Swing est une api "lightweigth", c'est-à-dire qu'elle redessine tous les composants graphiques (widgets) à l'aide des primitives de java2D. SWT au contraire utilise les api graphiques du système d'exploitation : ses widgets sont dessinés directement par le système d'exploitation. En clair et de façon synthétique pour afficher un bouton, swing va dessiner un rectangle, placer le label au millieu tandis que swt va demander au système de le faire.

Sous SWT, chaque objet java représentant un élément graphique n'est qu'un wrapper vers du code natif.


Quelles sont les avantages et inconvenients de SWT par rapport à SWING ?
auteur : Lunatix
Petit préambule rapide: Ce sujet peut declencher de grands debats et de terribles contreverses. Ici l'idée n'est que de présenter quelques pistes de reflexion pour vous aider à orienter votre choix et pas de donner une réponse définitive.

Avantages de SWT
  • Non standard : vous pouvez distribuer vous même swt avec votre application ce qui permet de gérer finement le versioning, de bénéficier rapidement des bugFixs et des mises à jour
  • Natif : swt s'adapte automatiquement au look and feel du système d'exploitation. Une application java sous swt va s'adapter automatiquement à un windows customisé à l'extreme, ou à un gtk avec thême exotique
  • Petite api : swt est une petite api, avec un nombre limité de widgets, et peu d'héritage, ce qui en fait une api facile à prendre en main
  • Consomation mémoire : la consomation mémoire de swt est plus faible que celle de swing
  • Vous pouvez bénéficier du projet Eclipse RCP comme framework de developpement
  • Open Source
  • Linkable : si vous prévoyez de compiler votre application avec GCJ et Gnu-Classpath, il est possible d'utiliser swt facilement (il existe une version de Eclipse native)
  • Bonne intégration : possibilité d'utiliser COM, des plugins, le browser web natif pour rendre du html

Inconvénients de SWT
  • Non standard : vous devez distribuer vous même swt avec votre application ce qui va alourdir votre distribution et parfois compliquer le deploiement
  • Non standard : moins de compétences sur swt, moins de doc, moins d'aide sur le forum de DVP
  • Natif : on subit les limitations de la plate-forme sous-jacente (taille maximum d'un champ texte, nombre d'image, pas de centrage des champs header des tables etc..)
  • Gestion mémoire : il est nécessaire de faire un .dispose() sur tous les éléments graphiques pour liberer la mémoire du composant natif qu'il représente
  • Petite api : swt/Jface est une petite api, et il manque des choses comparé à swing
  • Portabilité : Comparée à swing et à la version windows, La version Gtk de swt reste lente (en plus d'info)
  • Pas d'applet possible
  • Pas de sandBox possible dans java webstart à cause des accès natifs

voila, pas de grande réponse définitive sur quoi utliser, mais on vous avait prévenu.


Quels sont les Widgets SWT ?
auteur : Lunatix
Vous pouvez voir les widget SWT sur cette page : Widgets SWT. Chaque Widget est présenté avec un exemple et sa javadoc.


Ou trouver des exemples sur SWT ?
auteur : Lunatix
L'équipe de developppement de SWT tient a jour une page d'exemples swt-home.
Vous pourrez y trouver des exemples d'utilisation de chacun des widgets SWT, ainsi que la réponse à des questions plus complexes comme comment lancer une tache longue dans un thread, gérer le drag and drop etc.


Comment lancer une application SWT ?
auteur : Lunatix
Pour lancer une application swt, vous devez bien sur avoir les jar swt dans le classpath, mais aussi declarer les librairies natives. Celles-ci se trouvent dans le sous répertoire de plugins org.eclipse.swt.[OS]
  • Sous Eclipse 3.1M5+ : il suffit de choisir dans le menu run -> application swt
  • Sous Eclipse : Run -> Run Java Applicaton -> New -> Arguments -> VM Arguments ajouter -Djava.library.path=c:\eclipse\plugins\org.eclipse.swt.win32_2.1.0\os\win32\x86
  • Enfin pour le distribuer vous devez ajouter dans la ligne de commande -Djava.library.path=chemin_vers_librairies

Bien sur, vous devrez adapter cette ligne de commande a votre OS, et à la version de swt utilisée, on vous laisse chercher un peu.


Comment inclure du Swing dans une application SWT et inversement ?
auteur : Lunatix
Pour inclure du swing dans swt, on a deja parlé de la page d'exemples maintenue par l'equipe de developpement de SWT, c'est typiquement là qu'il faut aller chercher un bon exemple
Ceux qui traitent de ce probleme sont regroupés sous le titre Swing/AWT

Lancer du swt dans swing : La réponse est simple, ce n'est pas possible.


Pourquoi mon widget qui hérite d'un widget swt plante a l'execution ?
auteur : Lunatix
Il est tout simplement fortement déconseillé d'hériter d'un widget swt. En effet, meme si swt est une api java, les objets que l'on utilise ne sont que des représentations du code natif d'un toolkit graphique qui ne supporte pas forcement l'héritage (gtk est codé en C par exemple). En conséquence chaque widget (sauf bien sur Composite) utilise un mécanisme pour bloquer l'heritage : la une méthode protected void checkSubclass() throws SWTException dont vous pouvez lire la javadoc en Javadoc

Vous allez dire, et le mot clé final il aurait pu servir non ? et bien oui, mais ce systême de check au runtime permet quand meme si vous le voulez vraiment d'hériter, il suffit de surcharger cette methode dans votre classe, tout cela bien sur à vos risques et périls. Le problème principal vient du fait que si votre widget hérité marche sous une plate-forme, il ne fonctionnera pas forcement sous une autre. Ce mécanisme est prévu surtout pour faire du bugfix sans attendre que cela soit intégré à la distribution officielle de swt, et pas du tout pour ajouter des fonctionnalités

En clair, pas d'héritage de widget en SWT. (il vous reste la composition, ce n'est pas si dramatique)


Comment packager une application SWT pour java web start ?
auteur : Lunatix
La présence des librairies natives de swt va vous forcer à signer vos jar afin de pouvoir sortir de la sandbox de java webstart.
Pour cela, il faut préparer un jar de votre application (myApp.jar), un jar avec les librairies natives (swt_win32.dll sous windows) que l'on va nommer swt-native.jar et avoir sous la main swt.jar.
  • keytool -genkey -keystore myKeyStore -alias myKey : pour générer votre propre certificat
    donnez à myKeyStore le nom que vous voulez pour votre keyStore
    donnez à myKey le nom que vous voulez pour votre clée key
    (repondez aux questions ... et n'oubliez pas le mot de passe, et repondez yes à la derniere question
  • ensuite : keytool -selfcert -alias myKey -keystore myKeyStore (check the password)
  • et pour finir
    jarsigner.exe -keystore myKeyStore -verbose -certs swt.jar myKey
    jarsigner.exe -keystore myKeyStore -verbose -certs swt-native.jar myKey
    jarsigner.exe -keystore myKeyStore -verbose -certs myApp.jar myKey
  • et bien sur, de même avec toutes vos librairies.(jface.jar, etc...)
puis comme fichier .jnlp
<?xml version="1.0" encoding="utf-8"?>
<jnlp spec="1.0+" codebase="http://www.domaine.com/application" href="myApp.jnlp">
  <information>
    <title>myApp</title>
    <vendor>Lunatix corporation inc</vendor> 
    <homepage href="http://www.domaine.com/"/>
    <description>myApp</description>
    <description kind="short">une application de test</description>
  </information>
  <security>
      <all-permissions/>
  </security>

  <resources>
	<j2se version="1.4+"/>
	<jar href="myApp.jar"/>
	<jar href="jface.jar"/>
	<jar href="forms.jar"/>
	<nativelib href="swt-native.jar"/>
  </resources>
  
  <resources os="Windows"> 
	 <jar href="swt.jar"/>
  </resources>

  <application-desc main-class="com.domaine.myApp.MyApp" />
</jnlp>

version plus detaillée: allez lire l'article fr lfe.developpez.com/Java/SWT/WebStart/ de LFE


Comment afficher un calendrier ou un selecteur de date en SWT ?
auteur : Lunatix
Il n'y a pas de calendrier ni de widgets dédié aux dates dans Swt. Il faut donc utiliser des librairies supplementaires
en Swt-controls
en swtcalendar
en swt-datepicker


Comment faire pour avoir une Table SWT plus souple ?
auteur : Lunatix
Le widget Table de SWT qui est basé sur l'équivalent natif est assez limité.
Si vous voulez un composant plus souple utilisez en KTable.


rechercher
precedent    sommaire    suivant    telecharger

Consultez les autres F.A.Q's

Valid XHTML 1.1!Valid CSS!


Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2005 Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.