Les FAQs Java :
FAQ JAVA FAQ Java EE FAQ Java ME FAQ Java XML FAQ JavaFX FAQ Java GUI FAQ Struts FAQ JSF FAQ JDBC JDO FAQ Hibernate FAQ Spring FAQ Eclipse FAQ NetBeans FAQ JCreator FAQ Maven 2

FAQ JavaFXConsultez toutes les FAQ

Nombre d'auteurs : 4, nombre de questions : 86, dernière mise à jour : 2 juillet 2013 

 
OuvrirSommaireBinding

Le binding est le fait de lier une propriété d'un objet avec une valeur qu'on aurait défini ailleur.

 
Sélectionnez


var couleurDuCercle = Color.YELLOW;

//Definition d'un cercle
def cercle:Circle = Circle {
    centerX: 100,
    centerY: 100
    radius: 40
    fill: bind couleurDuCercle // La couleur du cercle est liée à la variable couleurDuCercle
}

//Definition d'un rectangle
def rectangle = Rectangle {
    x: 10,
    y: 10
    width: 30,
    height: 30
    fill: Color.BROWN

	//Lorsque le curseur de la souris est positionné sur le rectangle, on change la couleur du cercle
    onMouseEntered: function( e: MouseEvent ):Void {
        couleurDuCercle = Color.CHOCOLATE;
    }
    //Lorsqu'on clique dans le rectangle, on change la couleur du cercle
    onMouseClicked: function( e: MouseEvent ):Void {
        couleurDuCercle = Color.DARKGREEN;
    }
	//Lorsque le curseur de la souris quitte le rectangle, on remet la couleur d'origine
    onMouseExited: function( e: MouseEvent ):Void {
        couleurDuCercle = Color.YELLOW;
    }
}


Stage {
    title: "Test binding"
    width: 300
    height: 300
    style: StageStyle.DECORATED;
    scene: Scene {
        fill: Color.TRANSPARENT
        //on demande l'affichage du cercle et du rectangle
        content: [cercle, rectangle]
    }
}

Voici donc ce qui est affiché à l'origine

Image non disponible

Maintenant, déplacer le curseur pour qu'il soit positionné sur le rectangle
Automatiquement, la couleur du cercle est changée en brun

Image non disponible

Cliquez maintenant dans le rectangle. La couleur du cercle sera changée en vert foncé

Image non disponible

Et maintenant, déplacer le curseur pour qu'il quitte le rectangle. Dès qu'il aura quitté le rectangle, la couleur du cercle sera à nouveau jaune, comme à l'origine.

Image non disponible

L'exemple ici est tellement simple qu'on pourrait se demander pourquoi ne pas directement changer la couleur du cercle et passer par la variable couleurDuCercle.

Nous allons donc compliquer quelque peu l'exemple en affichant maintenant également un triangle. Mais les couleurs du triangle seront opposées à celles du cercle. Ainsi, la couleur du bord du triangle sera la couleur de remplissage du cercle. La couleur de remplissage du triangle sera celle du bord du cercle.
Chaque fois qu'on cliquera sur le rectangle, on inversera les couleurs.

Voici ce que cela donne au niveau du code

 
Sélectionnez

var couleurA = Color.YELLOW;
var couleurB = Color.DARKGREEN;

//Definition d'un cercle
def cercle:Circle = Circle {
    centerX: 100,
    centerY: 100
    radius: 40
    fill: bind couleurA // La couleur du cercle est liée à la variable couleurDuCercle
    stroke: bind couleurB
    strokeWidth: 3
}

//Definition d'un rectangle
def rectangle = Rectangle {
    x: 10,
    y: 10
    width: 30,
    height: 30
    fill: Color.BROWN

    //Lorsqu'on clique dans le rectangle, on change la couleur du cercle
    onMouseClicked: function( e: MouseEvent ):Void {
        var couleur = couleurA;
        couleurA = couleurB;
        couleurB = couleur;
    }
}

def triangle = Polygon {
    points: [ 150,0, 250,0, 250,100 ]
    fill: bind couleurB
    stroke: bind couleurA
    strokeWidth: 5
}


Stage {
    title: "Test binding un peu plus complexe"
    width: 300
    height: 300
    style: StageStyle.DECORATED;
    scene: Scene {
        fill: Color.TRANSPARENT
        //on demande l'affichage du cercle et du rectangle
        content: [cercle, rectangle, triangle]
    }
}

Voilà ce que ca donne une fois le programme lancé

Image non disponible

Et lorsqu'on clique une fois sur le rectangle

Image non disponible

A chaque fois qu'on clique, on inverse juste les 2 couleurs. Et le cercle et le triangle sont automatiquement recoloriés comme il faut.

Le binding est vraiment quelque chose de très très puissant. Mais attention à l'usage qu'on en fait.

Créé le 27 janvier 2009  par Vincent Brabant

Une fois qu'une variable a été marquée, via le mot cle bind, comme associée à une autre, on ne peut plus assigner de valeur à cette variable.

Malheureusement pour nous, cela n'est pas détecté à la compilation (on se demande vraiment pourquoi, car tout est là pour en permettre la détection au moment de la compilation.) mais uniquement à l'exécution.

Créé le 27 janvier 2009  par Vincent Brabant
Les codes sources sont, sauf mention spéciale, libres de droits, et vous pouvez les utiliser à votre convenance. Pour le reste, ce document constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2009 Developpez LLC : Tous droits réservés Developpez LLC. Aucune reproduction, ne peux en être faite 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.