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 ?
        Où trouver des exemples sur SWT ?
        [3.0-] Comment lancer une application SWT ?
        [3.2+] 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 à l'exécution ?
        Comment packager une application SWT pour java web start ?
        [2.x] Comment afficher un calendrier ou un sélecteur de date en SWT ?
        [3.3+] Comment afficher un calendrier ou un sélecteur de date en SWT ?



Définition de SWT et de JFace ?
auteurs : Lunatix, djo.mos
SWT est une librairie graphique. C'est-à-dire qu'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 orienté objet, un modèle MVC et des fonctionnalités supplémentaires.


Quelles sont les différences entre SWT et SWING ?
auteur : Lunatix
Swing est une API "lightweight", 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 développement
  • 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 plug-ins, 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

Voilà, pas de grande réponse définitive sur quoi utiliser, mais on vous avait prévenu.


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


Où trouver des exemples sur SWT ?
auteur : Lunatix
L'équipe de développpement de SWT tient à jour une page d'exemples en 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 en thread, gérer le en drag and drop etc.


[3.0-] Comment lancer une application SWT ?
auteur : Lunatix
Pour lancer une application SWT, vous devez bien sûr avoir les jar SWT dans le classpath, mais aussi declarer les librairies natives. Celles-ci se trouvent dans le sous répertoire de plug-ins 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 sûr, vous devrez adapter cette ligne de commande a votre OS, et à la version de SWT utilisée, on vous laisse chercher un peu.


[3.2+] Comment lancer une application SWT ?
auteur : djo.mos
Dans les versions récentes d'Eclipse, pour lancer une application SWT, il suffit juste d'ajouter le jar de SWT correspondant à votre architecture (org.eclipse.swt.gtk.linux.x86_3.4.0.xxx.jar par exemple pour Linux/x86)
Ce jar peut être récupéré du dossier plug-ins de votre installation Eclipse.


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'équipe de développement de SWT, c'est typiquement là qu'il faut aller chercher un bon exemple
Ceux qui traitent de ce problème 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 à l'exécution ?
auteurs : Lunatix, Laurent.B
Il est fortement déconseillé d'hériter d'un widget SWT.
En effet, même 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. De fait, l'héritage n'est pas forcément supporté (Gtk est codé en C par exemple).
En conséquence, chaque widget (sauf bien sûr 'Composite') utilise un mécanisme pour bloquer l'héritage : la une méthode protected void checkSubclass() throws SWTException. Cf. la Javadoc en Javadoc

Peut-être vous posez-vous la question de savoir pourquoi le mot clé final n'a pas été utilisé dans ce genre de cas ? Tout simplement parce que le systême de check au runtime n'empêche pas l'héritage. Ce qui fait qu'en cas de nécessité, il suffit de surcharger cette méthode dans votre classe.
Cependant, en choisissant cette option, vous vous exposez à des problèmes de non portabilité car si votre widget hérité fonctionne sur une plate-forme, il peut ne pas fonctionner sur une autre. Donc, à vous de savoir si ça vaut le coup de passer par l'héritage. L'utilisation de ce mécanisme est à réserver pour faire du bugfix, sans attendre que cela soit intégré à la distribution officielle de SWT. Il ne faut pas s'en servir en revanche pour ajouter des fonctionnalités.

En clair, pas d'héritage de widget en SWT. La solution est d'utiliser la composition.


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 sûr, 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


[2.x] Comment afficher un calendrier ou un sélecteur de date en SWT ?
auteur : Lunatix
Il n'y a pas de calendrier ni de widget dédié aux dates dans SWT. Il faut donc utiliser des librairies supplementaires
en swt-controls
en swtcalendar
en swt-datepicker


[3.3+] Comment afficher un calendrier ou un sélecteur de date en SWT ?
auteur : djo.mos
Depuis la version 3.3, un composant de sélection de date/temps a été intégré au jeu de composants standard de SWT. C'est le widget en DateTime

Voici un exemple de son utilisation :
DateTime calendar = new DateTime (shell, SWT.CALENDAR);
DateTime time = new DateTime (shell, SWT.TIME);


Consultez les autres F.A.Q's


Valid XHTML 1.0 TransitionalValid CSS!

Publicité

Best Of

Actualités les plus lues

Semaine
Mois
Année

Ressources

Débuter

Forums

Contact

Pour rejoindre la rédaction, émettre une suggestion ou proposer un tutoriel : contactez nous via le forum ou par email

Téléchargez

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 oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2010 Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. Cette page est déposée à la SACD.

Vos questions techniques : forum d'entraide Eclipse - Publiez vos articles, tutoriels et cours
et rejoignez-nous dans l'équipe de rédaction du club d'entraide des développeurs francophones
Nous contacter - Hébergement - Participez - Copyright © 2000-2010 www.developpez.com - Legal informations.