Programmer avec le langage Linotte
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.

Programmer avec le langage LinotteConnexion

Besoin d'un conseil sur la programmation en Linotte ?

Le Deal du moment :
Cartes Pokémon : sortie d’un nouveau ...
Voir le deal

descriptionTutoriel pour créer un greffon graphique. EmptyTutoriel pour créer un greffon graphique.

more_horiz
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

descriptionTutoriel pour créer un greffon graphique. EmptyTutoriel pour créer un greffon graphique.

more_horiz
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 ^^

descriptionTutoriel pour créer un greffon graphique. EmptyTutoriel pour créer un greffon graphique.

more_horiz
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...)

descriptionTutoriel pour créer un greffon graphique. EmptyTutoriel pour créer un greffon graphique.

more_horiz
On ne peut pas faire les évènements via Java? (maintenant, je fais aussi du Java :p)

descriptionTutoriel pour créer un greffon graphique. EmptyTutoriel pour créer un greffon graphique.

more_horiz
Du style :

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

?

descriptionTutoriel pour créer un greffon graphique. EmptyTutoriel pour créer un greffon graphique.

more_horiz
En java oui... en Linotte non....

descriptionTutoriel pour créer un greffon graphique. EmptyTutoriel pour créer un greffon graphique.

more_horiz
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?

descriptionTutoriel pour créer un greffon graphique. EmptyTutoriel pour créer un greffon graphique.

more_horiz
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" />

descriptionTutoriel pour créer un greffon graphique. EmptyTutoriel pour créer un greffon graphique.

more_horiz
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 !

descriptionTutoriel pour créer un greffon graphique. EmptyTutoriel pour créer un greffon graphique.

more_horiz
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 ? ^^

descriptionTutoriel pour créer un greffon graphique. EmptyTutoriel pour créer un greffon graphique.

more_horiz
Ok, j'attends ton retour !

descriptionTutoriel pour créer un greffon graphique. EmptyTutoriel pour créer un greffon graphique.

more_horiz
http://www.siteduzero.com/forum-83-4399 ... l#r4130965
^^

descriptionTutoriel pour créer un greffon graphique. EmptyTutoriel pour créer un greffon graphique.

more_horiz
En attendant de nouvelles réponses, voici ce que j'ai trouvé :

http://www.developpez.net/forums/d32224 ... raphics2d/

descriptionTutoriel pour créer un greffon graphique. EmptyRe: Tutoriel pour créer un greffon graphique.

more_horiz
privacy_tip Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum