I. Introduction








télécharger 275.91 Kb.
titreI. Introduction
page4/15
date de publication02.02.2018
taille275.91 Kb.
typeDocumentos
ar.21-bal.com > loi > Documentos
1   2   3   4   5   6   7   8   9   ...   15

C.Appeler des propriétés statiques


Nous allons maintenant placer nos boutons dans un layout permettant de faciliter leur placement à l’écran :

Titre

xml Oui Line de début Dissimulable Lien fichier










Le layout VBox est une boite verticale qui place tous ses éléments en colonne. Ses 4 cotés sont ancrés sur les bordures de l’AnchorPane qui sert de racine au document. Désormais, le premier bouton voit sa hauteur et sa largeur grandir ou diminuer pour qu’il remplisse tout l’espace occupé par la boite verticale.



Nous pouvons voir que la balise VBox ainsi que la première balise Button contiennent des attributs qui ne sont pas des accès aux propriétés de ces deux classes :

Titre

xml Oui Line de début Dissimulable Lien fichier

AnchorPane.bottomAnchor="6.0" AnchorPane.leftAnchor="6.0" AnchorPane.rightAnchor="6.0" AnchorPane.topAnchor="6.0"

[...]

VBox.vgrow="ALWAYS"

Grosso-modo, on peut considérer que lorsque le FXML sera chargé en mémoire, l’API effectuera les appels aux méthodes statiques suivantes :

Titre

java Oui Line de début Dissimulable Lien fichier

AnchorPane.setTopAnchor(vbox, 6.0);

AnchorPane.setLeftAnchor(vbox, 6.0);

AnchorPane.setRightAnchor(vbox, 6.0);

AnchorPane.setBottomAnchor(vbox, 6.0);

[...]

VBox.setVgrow(button, Priority.ALWAYS);

Ces éléments sont appelés des propriétés "statiques" ou propriétés "attachées", elles ne proviennent pas de l’objet lui-même mais de son conteneur parent et n’ont vraiment de sens que par rapport au contexte de leur utilisation. Par exemple, définir AnchorPane.bottomAnchor="6.0" dans le code de la balise Button, n’aurait eut aucun effet au final.

De plus, on peut voir que j’ai, cette fois-ci, utilisé une valeur tirée d’une enum pour la valeur de l’attribut VBox.vgrow dans la balise Button. Cela vous montre que le chargement du FXML peut résoudre des types de valeurs un peu plus complexes que de simples nombres, booléens ou chaine de caractères. Si une valeur non-définie dans l’enum Priority avait été utilisée à la place, le chargement du FXML aurait levé une exception de type InvocationTargetException.

D.Utiliser des classes ne provenant pas de l’API


Dans du FXML, vous pouvez sans problème utiliser des classes qui ne sont pas parties de l’API. Certaines limitations s’appliquent lors de l’utilisation de nœuds autres que ceux de l’API :

  • Il faut qu’il y ait eut un import du package contenant la classe au début du FXML.

  •  La classe doit avoir un constructeur par défaut (sans argument) accessible.

  • Et bien sur à l’exécution, le bytecode de cette classe doit être accessible sur le CLASSPATH.

Ces restrictions s’appliquent tant pour la déclaration en balise racine que pour la déclaration en sous-balise. Si la classe n’est pas résolue au chargement du FXML, une exception de type javafx.fxml.LoadException sera levée.

Si les propriétés de vos classes sont correctement décrites, vous pouvez également les utiliser depuis le FXML en déclarant des attributs correspondant dans les balises.

Il est aussi possible d’utiliser des classes qui ne sont pas du tout des nœuds graphiques, ce qui peut être utile quand on doit remplir le contenu d’une ListView ou d’une ComboBox avec des valeurs par défaut. Prenons, par exemple, la classe suivante qui défini une voiture avec une propriété brand qui contient la marque de la voiture :

Titre

java Oui Line de début Dissimulable Lien fichier

package test;

import javafx.beans.property.SimpleStringProperty;

import javafx.beans.property.StringProperty;

public class Car {

// Définition de la propriété brand.

private final StringProperty brand = new SimpleStringProperty(this, "brand", null);

// Getter.

public final String getBrand() {

return brand.get();

}

// Setter.

public final void setBrand(final String value) {

brand.set(value);

}

// Accès à la propriété.

public final StringProperty brandProperty() {

return brand;

}

}

Il est tout à fait possible d’initialiser des instances de la classe Car dans un fichier FXML pour remplir une ComboBox :

Titre

xml Oui Line de début Dissimulable Lien fichier











































Ce qui donne le résultat suivant :



Bon d’accord, on ne voit que des chaines de texte dans le style test.Car@6bab735a. C’est tout à fait normal puisque nous n’avons pas mis de renderer approprié sur la ComboBox pour afficher des instances de Car. Mais si vous rajoutez la méthode suivante dans la classe Car, alors vous verrez que les objets listés contiennent bien les valeurs que nous leur avons données :

Titre

java Oui Line de début Dissimulable Lien fichier

@Override

public String toString() {

return getBrand();

}

C’est tout de même mieux comme cela, non ?



Nous pouvons remarquer plusieurs choses :

  • Nous avons importé deux nouveaux packages qui ne sont pas liés au SceneGraph : le package javafx.collections et le package test.

  • Nous avons effectivement chargé trois instances de la class test.Car et nous avons initialisé directement le contenu de la propriété brand depuis le FXML !

  • Afin de remplir la propriété items de la classe ComboBox, nous avons du créer une nouvelle instance de ObservableList.

Certaines propriétés comme children sur les layouts permettent de faire des déclarations implicites sans devoir manuellement créer une nouvelle instance de las classe ObservableList. Apparemment, ce n’est pas encore le cas pour la propriété items de la classe ComboBox et donc j’ai du manuellement faire une telle déclaration. Si un jour, une telle déclaration implicite est acceptée par le loader FXML, il suffira alors de faire :

Titre

xml Oui Line de début Dissimulable Lien fichier















Il ne faut pas hésiter à poster des Request for Enhancement sur le JIRA de JavaFX pour obtenir de telles améliorations.
1   2   3   4   5   6   7   8   9   ...   15

similaire:

I. Introduction iconIntroduction générale Introduction aux ordinateurs

I. Introduction iconTD/tp 1 Introduction au sdk d’Android 1 Introduction
«*. univ-lr fr» pour éviter d’utiliser le proxy pour les adresses internes à l’ulr

I. Introduction icon1. Clique d’abord sur «Visite virtuelle Haussman» et regarde l’introduction...
«Visite virtuelle Haussman» et regarde l’introduction à la belle architecture du bâtiment

I. Introduction iconI introduction

I. Introduction iconI introduction

I. Introduction iconI. Introduction

I. Introduction iconI introduction

I. Introduction iconA. Introduction

I. Introduction iconI introduction

I. Introduction iconI. introduction








Tous droits réservés. Copyright © 2016
contacts
ar.21-bal.com