Rechercher
Résultats par :
Recherche avancée
Mots-clés

caractères  taille  convertir  vider  

Qui est en ligne ?
Il y a en tout 2 utilisateurs en ligne :: 0 Enregistré, 0 Invisible et 2 Invités

Aucun

Voir toute la liste


Partagez
Voir le sujet précédentAller en basVoir le sujet suivant
Posting Freak
Messages : 1188
Date d'inscription : 2004-12-09
Voir le profil de l'utilisateurhttp://langagelinotte.free.fr/

Tutoriel pour créer un greffon graphique.

le Tue 23 Dec - 13:26
Bonjour,

Voici un tutoriel pour écrire un greffon graphique. Les greffons graphiques permettent de créer des nouvelles espèces graphiques.

Avant tout de chose, pour créer des greffons, il vous faut connaitre le langage Java ! De plus, il vous faut au minimum Linotte 0.6.1.


Deux grosses étapes pour créer un greffon :
a - Définir dans un fichier de description les caractéristique de votre espèce;

b - ensuite dans un fichier .java implémenter les méthodes pour générer l'affichage sur la toile.

Vous pouvez télécharger l'exemple complet en bas du message !


1 - Créer le fichier de description du greffon :

Exemple : graphique_bouton.greffon.xml

Code:
<
?xml version="1.
0" encoding="UTF-8"?>

<
greffon nom="Bouton" espece="bouton" class="org.
linotte.
greffons.
impl.
Bouton">

<
lib>
graphiqueBouton.
zip<
/lib>

<
description>
Espèce graphique pour afficher un bouton simple<
/description>

<
auteur>
R.
M<
/auteur>

<
version>
0.
1<
/version>

<
attribut nom="bordure" type="BigDecimal">
0<
/attribut>

<
attribut nom="x" type="BigDecimal">
0<
/attribut>

<
attribut nom="y" type="BigDecimal">
0<
/attribut>

<
attribut nom="largeur" type="BigDecimal">
100<
/attribut>

<
attribut nom="hauteur" type="BigDecimal">
100<
/attribut>

<
attribut nom="transparence" type="BigDecimal">
100<
/attribut>

<
attribut nom="texte" type="String">
Hello !<
/attribut>

<
attribut nom="couleur_texte" type="String">
blanc<
/attribut>

<
attribut nom="couleur_bordure" type="String">
rouge<
/attribut>

<
attribut nom="couleur_bouton" type="String">
noir<
/attribut>

<
/greffon>
2 - Créer un classe héritant de org.linotte.greffons.externe.Graphique

Le source de cette classe est présente dans le répertoire greffons.

Exemple :
Code:
package org.
linotte.
greffons.
impl;


import java.
awt.
AlphaComposite;

import java.
awt.
Font;

import java.
awt.
Graphics2D;

import java.
awt.
Shape;

import java.
awt.
font.
FontRenderContext;

import java.
awt.
font.
TextLayout;

import java.
awt.
geom.
AffineTransform;

import java.
awt.
geom.
Rectangle2D;

import java.
math.
BigDecimal;


import org.
linotte.
frame.
latoile.
Couleur;

import org.
linotte.
greffons.
externe.
Graphique;


/**
* Exemple simple de greffon graphique pour afficher un bouton
* @author R.
M
*
*/
public class Bouton extends Graphique {

private Shape bouton;


public Bouton() {
}

@Override
public void forceAffichage(String attribut) {
// Rien à faire
}

@Override
public Shape getShape() {
return bouton;

}

@Override
public void modifier(String value, String attribute, String id) throws GreffonException {
// Rien à faire
}

@Override
public void projette(Graphics2D g2, Espece espece) throws GreffonException {

// Attention :
g2 peut être null dans le cas où Linotte doit calculer les collisions.


// Gestion de la transparence :

float transparence = ((BigDecimal) espece.
getAttribut("transparence").
getValeur()).
intValue() / 100f;

if (transparence >
1 || transparence <
0)
transparence = 1;


// Texte du bouton :

String texte = (String) espece.
getAttribut("texte").
getValeur();


// Dimensions :

int hauteur = ((BigDecimal) espece.
getAttribut("hauteur").
getValeur()).
intValue();

int largeur = ((BigDecimal) espece.
getAttribut("largeur").
getValeur()).
intValue();


// Position :

int x = ((BigDecimal) espece.
getAttribut("x").
getValeur()).
intValue();

int y = ((BigDecimal) espece.
getAttribut("y").
getValeur()).
intValue();

int b = ((BigDecimal) espece.
getAttribut("bordure").
getValeur()).
intValue();


// Couleur :

String couleur_texte = (String) espece.
getAttribut("couleur_texte").
getValeur();

String couleur_bordure = (String) espece.
getAttribut("couleur_bordure").
getValeur();

String couleur_bouton = (String) espece.
getAttribut("couleur_bouton").
getValeur();


// Construction des shapes :

Shape bordure = new Rectangle2D.
Double(x, y, largeur, hauteur);

bouton = new Rectangle2D.
Double(x + b, y + b, largeur - (2 * b), hauteur - (2 * b));


if (g2 != null) { // g2 peut-être vide
// la variable bouton est utilisée pour la gestion de collision
FontRenderContext context = g2.
getFontRenderContext();

Font font = new Font("Serif", Font.
BOLD, 15);

TextLayout text = new TextLayout(texte, font, context);

double dl = text.
getBounds().
getWidth();

AffineTransform rotator = new AffineTransform();

rotator.
translate(x + b + (largeur / 2) - (dl / 2) - 5, y + b + (hauteur / 2));

g2.
setComposite(AlphaComposite.
getInstance(AlphaComposite.
SRC_OVER, transparence));

g2.
setColor(Couleur.
retourneCouleur(couleur_bordure));

g2.
fill(bordure);

g2.
setColor(Couleur.
retourneCouleur(couleur_bouton));

g2.
fill(bouton);

g2.
setColor(Couleur.
retourneCouleur(couleur_texte));

g2.
fill(text.
getOutline(rotator));

}

}

}
3 - zipper la classe compilée dans graphiqueBouton.zip

4 - Copier graphiqueBouton.zip et graphique_bouton.greffon.xml dans le répertoire greffons.

5 - Relancer Linotte.

Une ligne dans le tableau doit indiquer que le greffon est bien chargé :
Code:
Greffon chargé :
Bouton ( version 0.
1 ).
Espèce graphique pour afficher un bouton simple.
Auteur :
R.
M"
6 - Tester !

Exemple de livre :

Code:
Livre :
Bouton simple
(Spécification :
0.
6.
1)
(Auteur :
R.
M)
Paragraphe :
Affichage !
Rôles :

b1 est un bouton, x vaut 200, y vaut 200, largeur vaut 90, hauteur vaut 40, bordure vaut 3, couleur_bordure vaut "gris", couleur_bouton vaut "noir", couleur_texte vaut "ambre jaune", texte vaut "Un bouton"
Actions :

efface la toile
projette b1
termine
7 - Bravo, votre greffon fonctionne !

Et n'oubliez de venir sur ce forum pour partager vos créations !

FAQ :
1 - Pour compiler la classe Couleur, il faut ajouter dans le classpath Linotte.jar


Ronan
Senior Member
Messages : 357
Date d'inscription : 2008-05-23
Voir le profil de l'utilisateur

Tutoriel pour créer un greffon graphique.

le Sat 31 Jan - 20:31
Heum... je pense pouvoir faire une espèce "menu" !!! :p lol
Je le ferais dans pas longtemps : ca ne doit pas prendre énormément de temps ^^
Posting Freak
Messages : 1188
Date d'inscription : 2004-12-09
Voir le profil de l'utilisateurhttp://langagelinotte.free.fr/

Tutoriel pour créer un greffon graphique.

le Sun 1 Feb - 10:18
C'est un très bonne idée... tu peux commencer par faire un teste simple mais je pense qu'il va te manquer rapidement des choses au niveau de Linotte notamment la gestion des évènements (clique, déplace de la souris etc...)
Senior Member
Messages : 357
Date d'inscription : 2008-05-23
Voir le profil de l'utilisateur

Tutoriel pour créer un greffon graphique.

le Sun 1 Feb - 11:10
On ne peut pas faire les évènements via Java? (maintenant, je fais aussi du Java :p)
Senior Member
Messages : 357
Date d'inscription : 2008-05-23
Voir le profil de l'utilisateur

Tutoriel pour créer un greffon graphique.

le Sun 1 Feb - 11:11
Du style :

public void actionPerformed(ActionEvent e) {
if(e.getSource().equals(item20)){}
}

?
Posting Freak
Messages : 1188
Date d'inscription : 2004-12-09
Voir le profil de l'utilisateurhttp://langagelinotte.free.fr/

Tutoriel pour créer un greffon graphique.

le Sun 1 Feb - 12:12
En java oui... en Linotte non....
Senior Member
Messages : 357
Date d'inscription : 2008-05-23
Voir le profil de l'utilisateur

Tutoriel pour créer un greffon graphique.

le Sun 1 Feb - 12:40
heum... mais les greffons sont créés en Java, donc... si je créé un tel greffon (donc un menu) avec des paramètres (tels que des noms de menus, sous-menus, etc)... Linotte pourra créer ce menu non?
Senior Member
Messages : 357
Date d'inscription : 2008-05-23
Voir le profil de l'utilisateur

Tutoriel pour créer un greffon graphique.

le Thu 3 Sep - 9:53
Ah je crois que j'ai compris =D
On ne peut pas directement utiliser un JTextArea en Linotte, par exemple ?

Par exemple... on dit que le type de variable Linotienne "zone de multi-textes" est en fait un JTextArea en Java... mais ça on peut pas ? <img src=" title="Sad" />
Posting Freak
Messages : 1188
Date d'inscription : 2004-12-09
Voir le profil de l'utilisateurhttp://langagelinotte.free.fr/

Tutoriel pour créer un greffon graphique.

le Thu 3 Sep - 10:43
Oui, c'est bien ça. Parceque la toile est un objet Graphics2D et à ma connaissance, il n'est pas possible de dessiner des objets Swing sur un Graphics2D.... Je suis bloqué par ça... tant que je trouve pas de solution !
Senior Member
Messages : 357
Date d'inscription : 2008-05-23
Voir le profil de l'utilisateur

Tutoriel pour créer un greffon graphique.

le Thu 3 Sep - 12:41
arf c'est dommage lol

Sinon, on aurait eu qu'à placer des composants graphiques SWING, AWT etc (les renommer, renommer leurs méthodes aussi pour que ce soit français) lol

Je vais demander si c'est vraiment impossible sur le Site Du Zéro ^^
Peut-être auront-ils une astuce ? ^^
Posting Freak
Messages : 1188
Date d'inscription : 2004-12-09
Voir le profil de l'utilisateurhttp://langagelinotte.free.fr/

Tutoriel pour créer un greffon graphique.

le Thu 3 Sep - 14:50
Ok, j'attends ton retour !
Senior Member
Messages : 357
Date d'inscription : 2008-05-23
Voir le profil de l'utilisateur

Tutoriel pour créer un greffon graphique.

le Thu 3 Sep - 16:20
Senior Member
Messages : 357
Date d'inscription : 2008-05-23
Voir le profil de l'utilisateur

Tutoriel pour créer un greffon graphique.

le Thu 3 Sep - 16:30
En attendant de nouvelles réponses, voici ce que j'ai trouvé :

http://www.developpez.net/forums/d32224 ... raphics2d/
Contenu sponsorisé

Re: Tutoriel pour créer un greffon graphique.

Voir le sujet précédentRevenir en hautVoir le sujet suivant
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum