Jaxe, votre éditeur XML
Jaxe, votre éditeur XML
Entrée du siteSommairePage pour l'impression<-->

Création de nouveaux éléments Jaxe

Auteur: Damien Guillaume

On appelle élément Jaxe une classe dérivée de la classe jaxe.JaxeElement, décrivant un affichage pour un élément XML donné. Les éléments Jaxe standard sont regroupés dans le package jaxe.elements. Ils correspondent à des types d'affichage des fichiers de configuration (par exemple, le type string correspond à l'élément Jaxe jaxe.elements.JEString).

La création d'un nouvel élément Jaxe se fait en créant une nouvelle classe dérivée de jaxe.JaxeElement. Il peut ensuite être utilisé dans un fichier de configuration avec le type plugin, en précisant la classe à utiliser. Par exemple:

<AFFICHAGE_ELEMENT element="BOUBOULE" type="plugin">
  <PARAMETRE nom="classe" valeur="JEBooleen"/>
</AFFICHAGE_ELEMENT>

Deux méthodes doivent impérativement être définies dans l'élément Jaxe: init et nouvelElement. Deux autres ne sont utiles que si on utilise des balises de début et de fin (comme expliqué plus loin): insPosition et (si l'élément a des attributs) majAffichage.

init est utilisé pour l'initialisation et l'insertion du composant Swing dans la zone de texte. On trouve en paramètres la position à laquelle l'élément doit être inséré, et le nœud DOM. A partir de ces paramètres, il faut insérer le composant avec la méthode JaxeElement.insertComponent(Position pos, JComponent comp).

Les choses se compliquent si on veut utiliser un composant pour une balise de départ et un composant pour une balise de fin, en laissant Jaxe traiter récursivement les sous-éléments. Il faut alors récupérer la position dans le texte après l'insertion de la balise de départ (elle est retournée par insertComponent), ajouter les enfants avec creerEnfants(Position), puis insérer la balise de fin avec un nouvel appel à insertComponent (avec l'objet Position passé en paramètre à creerEnfants. Il faut ensuite mettre à jour le style des caractères pour les balises et le texte des enfants, ce qui nécessite d'avoir conservé la position de départ avant le premier insertComponent. Voilà un exemple:

int offsetdebut = pos.getOffset();
Position newpos = insertComponent(pos, composantBaliseDebut);
creerEnfants(newpos);
insertComponent(newpos, composantBaliseFin);
if (newpos.getOffset() - offsetdebut - 1 > 0) {
  SimpleAttributeSet style = attStyle(null);
  if (style != null)
    doc.setCharacterAttributes(offsetdebut, newpos.getOffset() - offsetdebut - 1, style, false);
}

La méthode nouvelElement est appelée quand l'utilisateur insère un nouvel élément. Elle doit éventuellement demander des informations à l'utilisateur (comme par exemples les attributs), et renvoyer l'élément DOM correspondant. On peut se servir de jaxe.DialogueAttributs pour demander les attributs à l'utilisateur.

insPosition peut être appelée pour obtenir la position à laquelle sera placé le curseur après l'insertion d'un nouvel élément. Par défaut le curseur sera placé après l'élément, mais il peut être utile de le placer entre les balises de début et de fin quand celles-ci sont utilisées.

Enfin, majAffichage est appelée pour mettre à jour l'affichage quand les attributs ont été modifiés dans le panneau d'attributs.

Exemple

Le fichier suivant est un élément Jaxe utilisable pour un booléen, qui utilise une case à cocher pour l'affichage: JEBooleen.java. Il peut être compilé et placé dans un fichier jar pour être utilisable comme nouveau plugin de Jaxe, comme ceux disponibles sur la page des plugins.

Page précédentePage suivante