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 Linotte

Besoin d'un conseil sur la programmation en Linotte ?

Le Deal du moment : -50%
-50% sur Radio-réveil LENOVO SMART CLOCK ...
Voir le deal
24.99 €

2 participants

Tutoriel pour créer un greffon graphique.

avatar
cpc
Posting Freak


Messages : 1188
Date d'inscription : 2004-12-09

Tutoriel pour créer un greffon graphique. Empty Tutoriel pour créer un greffon graphique.

Message par cpc 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
avatar
dod
Senior Member


Messages : 357
Date d'inscription : 2008-05-23

Tutoriel pour créer un greffon graphique. Empty Tutoriel pour créer un greffon graphique.

Message par dod 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 ^^
avatar
cpc
Posting Freak


Messages : 1188
Date d'inscription : 2004-12-09

Tutoriel pour créer un greffon graphique. Empty Tutoriel pour créer un greffon graphique.

Message par cpc 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...)
avatar
dod
Senior Member


Messages : 357
Date d'inscription : 2008-05-23

Tutoriel pour créer un greffon graphique. Empty Tutoriel pour créer un greffon graphique.

Message par dod Sun 1 Feb - 11:10

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


Messages : 357
Date d'inscription : 2008-05-23

Tutoriel pour créer un greffon graphique. Empty Tutoriel pour créer un greffon graphique.

Message par dod Sun 1 Feb - 11:11

Du style :

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

?
avatar
cpc
Posting Freak


Messages : 1188
Date d'inscription : 2004-12-09

Tutoriel pour créer un greffon graphique. Empty Tutoriel pour créer un greffon graphique.

Message par cpc Sun 1 Feb - 12:12

En java oui... en Linotte non....
avatar
dod
Senior Member


Messages : 357
Date d'inscription : 2008-05-23

Tutoriel pour créer un greffon graphique. Empty Tutoriel pour créer un greffon graphique.

Message par dod 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?
avatar
dod
Senior Member


Messages : 357
Date d'inscription : 2008-05-23

Tutoriel pour créer un greffon graphique. Empty Tutoriel pour créer un greffon graphique.

Message par dod 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" />
avatar
cpc
Posting Freak


Messages : 1188
Date d'inscription : 2004-12-09

Tutoriel pour créer un greffon graphique. Empty Tutoriel pour créer un greffon graphique.

Message par cpc 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 !
avatar
dod
Senior Member


Messages : 357
Date d'inscription : 2008-05-23

Tutoriel pour créer un greffon graphique. Empty Tutoriel pour créer un greffon graphique.

Message par dod 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 ? ^^
avatar
cpc
Posting Freak


Messages : 1188
Date d'inscription : 2004-12-09

Tutoriel pour créer un greffon graphique. Empty Tutoriel pour créer un greffon graphique.

Message par cpc Thu 3 Sep - 14:50

Ok, j'attends ton retour !
avatar
dod
Senior Member


Messages : 357
Date d'inscription : 2008-05-23

Tutoriel pour créer un greffon graphique. Empty Tutoriel pour créer un greffon graphique.

Message par dod Thu 3 Sep - 16:20

avatar
dod
Senior Member


Messages : 357
Date d'inscription : 2008-05-23

Tutoriel pour créer un greffon graphique. Empty Tutoriel pour créer un greffon graphique.

Message par dod 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é


Tutoriel pour créer un greffon graphique. Empty Re: Tutoriel pour créer un greffon graphique.

Message par Contenu sponsorisé


    La date/heure actuelle est Tue 30 Nov - 7:00