|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 |
![]() ![]() ![]() Mickael BARONIngénieur de Recherche Inscription : juillet 2005 Messages : 3 981 ![]() |
Bonjour,
Actualité oblige, compte-tenu de l'intérêt de la communauté pour JavaFX, nous ouvrons ce sujet pour vous permettre d'y soumettre les questions récurrentes. La même règle s'applique que pour les FAQs déjà existantes : une question s'accompagne obligatoirement d'une réponse (sans quoi votre message sera supprimé). La FAQ est en ligne à l'adresse suivante : http://java.developpez.com/faq/javafx/ Merci aux contributeurs. |
|
00
|
|
|
#2 | ||||||
![]() ![]() Fabrice BouyéDéveloppeur Java Inscription : août 2005 Messages : 4 078 ![]() |
Qq idees de ci de la :
Dois-je connaître le langage Java ou l’API Java avant de me lancer dans JavaFX ? Non, mais cela est fortement recommandé car vous ne pourrez pas aller bien loin uniquement avec l’API JavaFX 1.0. Si vous vous contentez de faire des applications graphiques (similaires à du Flash par exemple), vous pouvez vous contenter de JavaFX uniquement. Puis-je appeler directement du Java de puis JavaFX ? Oui, c’est même recommandé car l’API JavaFX 1.0 est somme toute assez limitée. Vous devrez donc vous reposer sur les bibliothèques Java existantes pour étendre les possibilités de votre application. Vous avez directement accès à tout ce qui est présent sur le CLASSPATH. Tout comme en Java, vous pouvez soit directement indiquer le nom complet (package+nom) de la classe : Code :
Code :
Code :
J’ai créé un design dans un éditeur externe, comment le manipuler dans JavaFX ? Vous devez récupérer la JavaFX Production Suite qui est disponible sur http://www.javafx.org/. Cette suite contient un plugin pour Adobe Illustrator et Adobe Photoshop permettant de générer des fichiers .FXZ. Elle dispose également d’un convertisseur séparé capable de transformer un fichier .SVG en un fichier .FXZ ainsi qu’un visualisateur pour afficher un tel fichier. Elle fourni de plus la bibliothèque rajoutant le support du format FXD/FXZ dans JavaFX. Vous devrez rajouter cette bibliothèque à la liste des dépendances de votre projet pour être capable de manipuler le fichier .FXZ généré depuis votre application. De plus, le logiciel Inkscape est capable, nativement, d’exporter un fichier .SVG en un script .FX. Attention cependant, seule la version de développement supporte actuellement cette fonctionnalité et les scripts ainsi générés ne sont pour le moment pas compatibles avec la version finale de JavaFX. Que sont les fichiers FXD et FXZ ? Un fichier .FXZ (JavaFX Zipped Asset File) est une archive au format ZIP qui contient un fichier FXD (JavaFX Description File) qui lui contient du JavaFX Script. Cette archive peut également inclure des images bitmaps ou des fichiers de polices de charactères qui sont utilisées dans le design. Il existe également des fichiers .FXM (JavaFX MultiMedia File) contenant des séquences vidéo encodées avec le codec On2 et du son encodé en MP3. Puis-je utiliser des filtres dans la création de mon design ? De manière générale, dans la version actuelle, la plupart des filtres et effets avancés seront perdus durant la transformation ; il faut donc se restreindre à l'utilisation de formes simples et souvent vérifier que votre design garde une apparence correcte grace aux outils de prévisualisation fournis. Certains effets comme le Drop shadow (ombre portée) de Photoshop ou Illustrator (pas celui de Inkscape) peuvent cependant être conservés. Ce filtre, par exemple, sera traduit en un javafx.scene.effect.DropShadow sur chaque forme sur lequel il est activé. Il reste possible de rajouter des effets en éditant directement le FXD/FXZ après sa génération. On peut espérer que la Production Suite prenne plus d'effets en compte dans les mois à venir. Comment garder des références sur les différentes éléments (objets, groupes, calques, etc…) de mon design ? Dans votre éditeur, vous devez affecter un nom à chacune des entités que vous voulez manipuler par la suite. Si vous utilisez le convertisseur de la Production Suite, il est conseillé de préfixer les noms des entités par "jfx:". Attention certaines limitations peuvent intervenir suivant votre éditeur ; par exemple, Inkscape ne permet que de changer le label de calques en passant par la fenêtre Layers. Or, il se trouve que le convertisseur de la Production Suite utilise le champs ID de l’objet, le nom des calques sera donc perdu. Il reste cependant possible de changer l'ID du calque en passant par l'editeur XML intégré à Inkscape. De plus, lors de la conversion d’un fichier .SVG, le convertisseur de la JavaFX Production Suite 1.0 ignore les champs ID sur les objets <svg:text>, ces derniers perdront donc également leur identifiant. Si vous utilisez NetBeans, vous pourrez rajouter ces champs ultérieurement en éditant directement le fichier produit. Sinon, vous pouvez éditer le fichier FXD contenu dans le fichier FXZ pour rajouter les identificateurs manquants Comment générer un stub pour manipuler mon fichier FXD/FXZ ? Ouvrez directement votre fichier FXD/FXZ dans NetBeans. En haut de la fenêtre assurez-vous que le bouton Preview est sélectionné, ce qui affiche graphiquement votre design. Tout à droite de la barre d’outils de la fenêtre du fichier, cliquez sur Generate UI Stub (Ctrl + G) ; NetBeans vous proposera alors de générer une classe stub vous permettant de manipuler les entités contenues dans votre design. Si vous avez correctement nommé les entités de votre design, vous remarquerez que la classe ainsi générée contient une variable de type Node pour chaque entité déclarée dans votre design initial. Un gradient défini dans un éditeur externe s’affiche tout noir lorsque j’importe le fichier FXD/FXZ ? J’ai défini un gradient avec des couleurs s’arrêtant aux mêmes stops et il s’affiche tout noir ? JavaFX repose sur Java2D, hors il est impossible actuellement de définir un gradient dont les couleurs ont les mêmes valeurs de stop. Vous devrez donc modifier la définition de votre gradient pour être sur que les valeurs des stops soient strictement croissantes. Si vous avez défini ce gradient dans un éditeur externe (Illustrator, Photoshop, Inkscape, etc…), vous devez éditer ce gradient dans cet éditeur et réexporter votre projet au format FXD/FXZ. Si vous disposez de NetBeans vous pouvez directement modifier la définition du gradient dans le fichier FXD/FXZ.
__________________
Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes. suivez mon blog sur Développez.Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook |
||||||
|
00
|
|
|
#3 |
|
Expert Confirmé Sénior
![]() ![]() Inscription : mai 2003 Messages : 3 293 ![]() |
Un grand merci. Je les ai déjà intégrée dans la FAQ qu'on vous prépare.
__________________
Vincent Brabant Ne pas me contacter par MP ni par mail pour des questions techniques. Ma liste d'amis restera vide. |
|
|
00
|
|
|
#4 |
![]() ![]() Fabrice BouyéDéveloppeur Java Inscription : août 2005 Messages : 4 078 ![]() |
Petite correction/precision, une fois le stub genere (d'apres mes tests et les exemples de Sun) :
SVG => FXD => UI Stub - path (forme) : <svg:path>, <svg:rect>, etc... => SVGPath, Rectangle, etc... => Node - layer (calque) : <svg:g> racine dans Inkscape => Group racine => Node - group (groupe de formes, textes ou sous-groupes) : <svg:g> => Group => Node - text (texte) : <svg:text> => Text => Text - linear gradient (gradient lineaire) : <svg:linearGradient> => LinearGradient - radial gradient (gradient circulaire) : <svg:radialGradient> => RadialGradient Si les entites sont correctement nommees bien sur avant de passer au convertisseur (et compte tenu qu'il perd les ID des <svg:text> en chemin). Sinon pour voir les types concrets il suffit d'ouvrir le FXD. Faudrait que j'essaie de nommer les gradients pour voir s'il sont accessibles dans le stub...
__________________
Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes. suivez mon blog sur Développez.Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook |
|
00
|
|
|
#5 | ||||||||||||||||||||||
![]() ![]() Fabrice BouyéDéveloppeur Java Inscription : août 2005 Messages : 4 078 ![]() |
Comment afficher une fenêtre ?
Pour afficher une fenêtre, il suffit d’inclure un objet de type javafx.stage.Stage dans le script. Il est possible de lui donner un titre, des dimensions, sa position et divers autres attributs. Code :
Comment spécifier l’apparence d’une fenêtre ? La classe Stage dispose d’un champ style de type javafx.stage.StageStyle. StageStyle est une énumération qui liste tous les modes de décoration de fenêtre disponible.
Ce champs doit être configuré à l’initialisation de la fenêtre et il n’est plus possible de le modifier après coup. Comment définir une fenêtre décorée et opaque ? C’est le comportement par défaut, vous pouvez cependant spécifier StageStyle.DECORATED si vous le désirez. Code :
Code :
Il faut spécifier StageStyle.UNDECORATED . Code :
Il faut spécifier StageStyle.TRANSPARENT. Vous devez disposer de java 1.6.0 u10 ou plus pour que ceci fonctionne. Code :
Comment faire varier l’opacité de la fenêtre ? Vous devez utiliser le champs opacity de la classe Stage. La valeur du champ doit être comprise entre 0 (complètement transparent) et 1 (complètement opaque). Vous devez disposer de java 1.6.0 u10 ou plus pour que ceci fonctionne. Code :
Comment utiliser l’API SceneGraph ? Vous devez inclure un objet de type javafx.scene.Scene dans votre Stage. Vous placerez ensuite des objets de type javafx.scene.Node (ces objet peuvent contenir du texte, des formes vectorielles, des images, des composants Swing, un design fait dans un logiciel externe…) dans cette scène pour créer votre interface graphique. Code :
La couleur de fond d’une scène est blanche (javax.scene.paint.Color.WHITE) par defaut. Vous devez donc la remplacer par la couleur transparente (javax.scene.paint.Color.TRANSPARENT) : Code :
Les effets sont des classes proposant des effets graphiques à appliquer aux formes ou à la scène que vous désirez afficher. Ils sont définis dans le package javafx.scene.effect et ses sous-packages. Ce dernier contient les effets de base qui permettent de faire, entre autre des ombres portées ou du flou ou encore l’illumination d’un objet ou de la scène permettant ainsi de rendre plus réaliste cette dernière en faisant varier son éclairage. Ces effets reposent la plupart du temps sur la création d’images bitmap intermédiaires. Ils peuvent être gourmand tant en ressource CPU qu’en mémoire. Comment mettre en place un effet ? Il est possible de mettre un effet sur chaque Node de la scène en spécifiant son champ effect. Note : dans les exemples suivants nous partirons de ce code qui affiche un rectangle aux coins arrondis dans une fenêtre non-décorée dont le fond est transparent. Le rectangle possitionné en (50, 50) et de taille 200x100 est colorié avec un gradient linaire qui va du rouge au rouge foncé. Ce gradient colle aux extrémités du rectangle (utile si on redimensionne ce dernier). Code :
Pour rajouter une ombre portée à notre rectangle, il suffit lui donner un effet javafx.scene.effect.DropShadow. Par exemple : Code :
Vous remarquerez qu’il n’est pas possible de faire varier l’opacité de l’ombre. Pour cela il faudra faire varier la transparence de la couleur utilisée pour cette ombre ; cette couleur peut-être spécifiée via le champ color (la valeur par défaut est Color.BLACK). Comme la forme de l’ombre va déborder largement de celle du rectangle, vous devez prévoir une taille de fenêtre suffisante sinon l’ombre sera coupée à l’endroit où la fenêtre se termine (même si cette dernière est non-décorée). Ce qui nous donne le code suivant : Code :
__________________
Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes. suivez mon blog sur Développez.Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook |
||||||||||||||||||||||
|
00
|
|
|
#6 | ||||||||
![]() ![]() Fabrice BouyéDéveloppeur Java Inscription : août 2005 Messages : 4 078 ![]() |
Comment faire un flou gaussien ?
Pour faire que notre rectangle apparaisse flouté, il suffit lui donner un effet javafx.scene.effect.GaussianBlur. Par exemple : Code :
Code :
Pour faire varier les couleurs de notre rectangle, il suffit lui donner un effet javafx.scene.effect.ColorAdjust. Cette classe permet de faire varier les couleurs des pixels du Node source. Par exemple : Code :
Ce qui nous donne le code suivant : Code :
__________________
Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes. suivez mon blog sur Développez.Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook |
||||||||
|
00
|
|
|
#7 | |
|
Expert Confirmé Sénior
![]() ![]() Inscription : mai 2003 Messages : 3 293 ![]() |
Citation:
__________________
Vincent Brabant Ne pas me contacter par MP ni par mail pour des questions techniques. Ma liste d'amis restera vide. |
|
|
|
00
|
|
|
#8 |
![]() ![]() Inscription : décembre 2006 Messages : 1 878 ![]() |
Dans une partie dédiée aux fonctions :
Comment définir le point d'entrée de mon application ? Vous pouvez définir l'equivalant Java de la fonction : Code :
public static void main(String[] args){...} Code :
public function run(args: String[]){...} Par défaut JavaFX génére implicitement cette fonction, c'est pourquoi il n'est pas nécessaire de l'ecrire si vous n'en avez pas l'utilité.
__________________
Systèmes d'Informations Géographiques- Projets : GeoAPI GeotoolKit PuzzleGISPour un monde sans BigBrother IxQuick ni censure RSF |
|
|
00
|
|
|
#9 | ||
![]() ![]() Inscription : décembre 2006 Messages : 1 878 ![]() |
Dans une partie dédiée aux fonctions :
Ou se trouve le constructeur de ma classe ? Les classes JavaFX n'offrent pas la possibilité d'avoir des constructeurs avec différents paramètres. En revanche il est possible d'utiliser le mot clé : public-init afin de permetre la configuration des variables à la création. Deux fonctions sont aussi disponibles si vous souhaitez faire diverses opérations : Code :
__________________
Systèmes d'Informations Géographiques- Projets : GeoAPI GeotoolKit PuzzleGISPour un monde sans BigBrother IxQuick ni censure RSF |
||
|
|
00
|
|
|
#10 | ||||||
![]() ![]() Inscription : décembre 2006 Messages : 1 878 ![]() |
Comment afficher mes composants SWING dans JavaFX ?
Swing et JavaFX utilise la meme API de rendue : Java2D Il est donc relativement simple d'intégrer un composant SWING dans une interface javaFX. Première solution : utiliser l'outil fourni Code :
Seconde solution : par héritage Code :
Code :
Si vous n'avez a afficher qu'un composant plus ou moins statique (JLabel, Image ...) il est préférable d'utiliser la première solution. Si vous avez besoin de modifier le composant au cours de l'application alors il vaut mieux utiliser la seconde.
__________________
Systèmes d'Informations Géographiques- Projets : GeoAPI GeotoolKit PuzzleGISPour un monde sans BigBrother IxQuick ni censure RSF |
||||||
|
|
00
|
|
|
#11 |
![]() ![]() Inscription : décembre 2006 Messages : 1 878 ![]() |
A ajouter dans les sources d'informations :
le lien vers la javafxdoc : http://java.sun.com/javafx/1/docs/api/index.html
__________________
Systèmes d'Informations Géographiques- Projets : GeoAPI GeotoolKit PuzzleGISPour un monde sans BigBrother IxQuick ni censure RSF |
|
|
00
|
|
|
#12 |
![]() ![]() Fabrice BouyéDéveloppeur Java Inscription : août 2005 Messages : 4 078 ![]() |
Dans ce qui a rapport au convertisseur SVG => FXD
Au niveau intitulé... euh... Que deviennent mes entités SVG une fois converties en FXD ? ou quelques chose du genre. Mais il faudra remettre ca en forme pour simplifier la présentation et la rendre plus explicite.
__________________
Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes. suivez mon blog sur Développez.Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook |
|
00
|
|
|
#13 | ||||||||
![]() ![]() Fabrice BouyéDéveloppeur Java Inscription : août 2005 Messages : 4 078 ![]() |
Quelques tests supplementaires concernant les classes abstraites (avec correction de qq chose que j'ai dis dans le forum prive) :
Comment déclarer une classe abstraite ? Pour déclarer une classe comme étant abstraite, il suffit de précéder son nom du mot clé abstract. Code :
Pour déclarer une fonction comme étant abstraite, il suffit de précéder son nom du mot clé abstract et de lui donner un corps vide. Une telle fonction ne peut être définie que dans une classe abstraite. Si votre classe n’est pas abstraite vous aurez un message d’erreur du compilateur ou de votre IDE. Code :
Une classe abstraite peut être étendue par une autre classe à l’aide du mot-clé extends : Code :
Code :
Comment déclarer une enum ? Il n’est pour le moment pas possible de déclarer une enum en JavaFX même si certaines classes de l’API JavaFX sont elles-mêmes des enums (par exemple la classe javafx.stage.StageStyle). En fait ces enums sont tout simplement déclarées en Java, il vous est en effet possible de mélanger du code source Java et JavaFX dans votre projet JavaFX (en tout cas NetBeans le permet). <lien sur la FAQ Java indiquant comment créer des enums>
__________________
Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes. suivez mon blog sur Développez.Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook |
||||||||
|
00
|
|
|
#14 | ||||||||||||||||||||||||||||
![]() ![]() Fabrice BouyéDéveloppeur Java Inscription : août 2005 Messages : 4 078 ![]() |
Pour l'exemple suivant j'ignore le nom officiel de ces mécanismes. Je les appelle donc temporairement [barré]un pointeur[/barré] une référence sur une fonction et un "callback".
Comment définir une référence de fonction ? Pour JavaFX, une signature de fonction est un type comme un autre. Il est donc possible de définir une variable comme étant une référence sur une fonction et appeler cette fonction quand on appelle cette variable. Pour ce faire, il faut déclarer la variable suivie de :, puis du mot-clé function puis de la liste des arguments de la fonction entre parenthèse puis de : et de son type de retour. Par exemple : Ici bonjour est une référence vers une fonction qui ne prend pas d’argument et ne retourne rien. Par défaut, bonjour est initialisé à null. Si nous appellons : Rien ne se passe. De plus si nous imprimons la valeur de bonjour en faisant : Nous obtenons : Nous pouvons cependant lui affecter une valeur, définissons par exemple la fonction suivante : Code :
Code :
Si nous imprimons la valeur de bonjour, nous obtiendrons quelques chose de similaire à : Qui est la valeur de la référence sur la fonction que nous utilisons. Nous pouvons bien sur affecter d’autres valeurs à notre variable en cours d’exécution, ainsi le code suivant : Code :
Code :
Si nous essayons d’affecter des fonctions dont la signature ne correspond pas à la définition de notre variable des erreurs seront générées par le compilateur ou l’IDE. Ainsi le code suivant ne compilera pas : Code :
Il est bien sur possible de définir des signatures de référence sur des fonctions prenant en paramètres plusieurs arguments ou ayant des types de retour. Ainsi le code suivant est tout à fait valide : Code :
On remarquera également qu’il est impossible d’appeler la variable add sans argument ou avec le mauvais nombre d’argument entre les parenthèses car cela ne correspond pas à la signature utilisée. Ainsi le code suivant ne compilera pas : Code :
Code :
Code :
Il faudra donc manier ce concept avec précautions. Comment faire un callback ? Il est possible de faire un callback en créant une variable qui est une référence de fonction à l’intérieur d’une classe. Par exemple : Code :
Par défaut la variable est initialisée à null et le code ne fait strictement rien. Note : le nom de la variable importe peu et vous pouvez la nommer comme bon vous semble. Si nous écrivons : Code :
Lorsque nous implémentons notre classe, il est possible de redéfinir la variable onXXXChange comme n’importe quelle autre variable publique qui ne soit pas marquée public-read. Par exemple : Code :
Vous pouvez remarquer que la gestion des évènements claviers et souris dans l’API SceneGraph fonctionne exactement de la même maniere, vous serez donc ammener à surcharger les valeurs par défaut des variables onMouseClicked ou onKeyPressed (par exemple) pour gérer les événements dans la classe javafx.stage.Node et ses classes filles. Vous pouvez sans problème définir des variables avec des signatures de fonction qui prennent plusieurs arguments ou qui ont même un type de retour. Dans tous les cas, vous devrez faire attention à ce que vos variables soient correctement définies : Code :
Code :
__________________
Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes. suivez mon blog sur Développez.Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook |
||||||||||||||||||||||||||||
|
00
|
|
|
#15 | ||||||||||||||||
![]() ![]() Fabrice BouyéDéveloppeur Java Inscription : août 2005 Messages : 4 078 ![]() |
Comment faire une animation ?
Les animations sont construites à partir de la classe javafx.animation.Timeline et des autres classes présentes dans le package javafx.animation. Une animation consiste en une séquence d’étapes ou animations clés appelées « key Frames » placées dans une ligne temporelle. Ces étapes, permettent d’indiquer les changements dans l’état des variables qui servent à animer notre objet graphique. Une étape clé est modélisée par la classe javafx.animation.KeyFrame. L’exemple suivant affiche un rectangle aux bords arrondis et rempli d’un dégradé rouge dans une fenêtre non-décorée : Code :
Code :
De plus, le champ autoReverse indique que l’animation s'inverse lorsqu’elle arrive à la fin. Ainsi l’animation ira de l’étape 0s à l’étape 1s (1 seconde d’attente entre les deux étapes) puis de l’étape 1s à l’étape 0s (à nouveau 1 seconde d’attente entre les deux étapes). Si ce champ est omis, l’animation passera directement de l’étape 1s à l’étape 0s et nous ne verrons jamais varier la largeur du rectangle. L’appel à anim.playFromStart(); permet de démarrer une animation depuis le début de la ligne temporelle. Comment arrêter une animation ? Il suffit d’appeler sa méthode stop(). Comment relancer une animation ? Il suffit d’appeler sa méthode play(). L’animation reprendra à partir du point où elle s’est précédemment arrêtée. Si elle n’a jamais été lancée précédemment, elle démarrera au temps 0 de la ligne temporelle. Comment relancer une animation depuis le début ? Il suffit d’appeler sa méthode playFromStart(). Cette méthode relancera l’animation depuis le début de la ligne temporelle. Comment changer la vitesse d’une animation Il est possible de modifier la vitesse d’une animation en modifiant son champ rate. Celui-ci est à 1 par défaut. Pour doubler la vitesse d’une animation il suffit de le mettre à 2. Pour ralentir une animation de moitié, il suffit de le mettre à 0.5. Comment inverser une animation ? Il suffit de lui donner une valeur négative pour son champ rate. L’animation ira alors à rebours depuis son emplacement actuel dans la ligne temporelle. Comment spécifier où se trouve l’animation dans la ligne temporelle ? Il faut modifier son champ time en lui donnant une Duration. Comment spécifier le nombre de répétitions d’une animation ? Il faut modifier son champ repeatCount. Sa valeur par défaut est 1.0, l’animation s’exécutera donc une seule et unique fois. Pour répéter l’animation indéfiniment, il faut utiliser la valeur javafx.animation.Timeline.INDEFINITE. Comment inverser l’animation automatiquement quand elle se répète ? Il faut mettre son champ autoReverse à la valeur true. Si l’animation se répète plus d’une fois, son rate sera inversé à chaque fois qu’elle arrive à une extrémité de sa ligne temporelle. La valeur par défaut de ce champ est false. Comment faire une animation interpolée ? Notre animation se contente de modifier la largeur du rectangle à l’étape 0s puis à l’étape 1s ce qui n’est guère joli à l’écran. Il est possible de spécifier que les valeurs qui sont animées sont en fait interpolées à chaque pas de temps. Ainsi le code suivant : Code :
La notation variable => valeur est un raccourci qui évite de devoir créer manuellement des objets de type javax.animation.KeyValue et javax.animation.KeyValueTarget. Il est de plus possible de simplifier la création des étapes clés en utilisant la notation suivante ce qui évitera de devoir créer des KeyFrame manuellement : Code :
Code :
Code :
Comment spécifier le type d’interpolation à utiliser ? Il est possible de spécifier l’interpolation en utilisation le mot-clé tween suivit d’une instance d’un javafx.animation.Interpolator. L’interpolation par défaut est linéaire. Ainsi la définition suivante : Est équivalente à : Code :
Code :
Utiliser des interpolations dans la ligne temporelle permet de simuler des mouvements qui paraissent plus naturels et plus agréables à l’œil, par exemple si nous désirons animer un piston hydraulique. Comment définir son propre type d’interpolation ? Vous pouvez soit directement étendre la classe javafx.animation.Interpolator soit sa classe fille javafx.animation.SimpleInterpolator.
__________________
Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes. suivez mon blog sur Développez.Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook |
||||||||||||||||
|
00
|
|
|
#16 | ||||||||||||||||||
![]() ![]() Fabrice BouyéDéveloppeur Java Inscription : août 2005 Messages : 4 078 ![]() |
Comment imprimer sur la sortie standard ?
Vous pouvez utiliser les fonctions globales print() ou println(). Par exemple : Ce code affichera " Bonjour le monde !" suivit d’un saut de ligne. Vous pouvez également importer la classe java.lang.System et utiliser System.out.print(), System.out.println() ou System.out.printf() (comme en Java). Comment concaténer deux chaines de caractères ? Vous pouvez placer deux chaines de caractère cote à cote avec ou sans espace entre pour les concaténer : Code :
Si jamais vos chaines de caractère sont stockées dans des variables vous pouvez les concaténer avec des string expression : Code :
<lien vers la Q/R sur les string expression> Que sont les séquences ? En JavaFX les séquences sont des jeux de données indexées. Le premier élément d’une séquence est à l’indice 0, le second à l’indice 1, etc. jusqu’au dernier qui se trouve à l’indice <taille de la séquence -1>. On peut les voir comme des équivalents des tableaux en Java ou dans d’autres langages. Attention cependant les séquences JavaFX ne sont pas des tableaux Java ! Le didacticiel JavaFX vous montrera les usages avancés des séquences (parcours avec critère, insertion, suppression d’élément, extraction d’une sous-séquence, etc.). <Lien vers le didacticiel> Comment déclarer une séquence ? Une séquence peut être déclarée en listant tous ses éléments entre crochets, par exemple : Code :
Code :
Comment accéder aux éléments d’une séquence ? Il est possible d’accéder aux éléments d’une séquence en utilisant la notation habituelle des tableaux : le nom de la séquence suivit de l’indice de la valeur entre crochets. Par exemple : Code :
Comment connaître la taille d’une séquence ? Il faut utiliser l’opérateur sizeof. Par exemple : Code :
Que sont les string expressions ? Les string expressions sont des expressions placées dans une chaine de caractère que JavaFX peut évaluer au moment de l’exécution. Elles peuvent référencer des variables, ou même d’autres expressions. Par exemple : Code :
Tandis que le code suivant : Code :
Comment déclarer une string expression ? Pour déclarer une string expression il suffit d'écrire une expression entre accolades dans une chaine de caractère. Par exemple : Code :
Le dernier exemple qui indique comment imprimer une séquence définissant les jours de la semaine montre d’ailleurs une string expression à l’intérieur d’une autre string expression. Comment connaitre le répertoire ou package courant ? Vous devez utiliser la constante globale __DIR__. Ceci imprimera le répertoire courant ou le package à l’intérieur du fichier JAR dans lequel se trouve le script en train d’être exécuté. Vous pouvez également placer cette constante dans une string expression ce qui peut être utile pour construire des chemins ou des URL vers des ressources (images, sons, fichiers de propriétés, etc.) qui sont utilisées par vos classes. Note : le chemin retourné par __DIR_ se termine par un séparateur, il n'est donc pas nécessaire de le rajouter quand on construit un tel chemin. Ceci peut être une source d'erreur.
__________________
Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes. suivez mon blog sur Développez.Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook |
||||||||||||||||||
|
00
|
|
|
#17 | ||||||||||
![]() ![]() Fabrice BouyéDéveloppeur Java Inscription : août 2005 Messages : 4 078 ![]() |
Qu’est ce qui est considéré comme étant à l’intérieur de mon nœud ?
Généralement dans le cas de nœuds qui sont des formes géométriques, des groupements de nœuds ou des composants Swing, les parties du nœud qui sont complètement transparentes (avec un alpha égal à 0) sont considérés comme étant hors de la surface du nœud, par exemple : les coins évidés dans un rectangle avec des coins arrondis. De même, la plupart des effets graphiques tels que les ombres portées ou les reflets sont généralement considérés comme étant hors du nœud. Toutes les parties complètements opaques ainsi que les parties semi-transparentes des formes et groupements sont considérées comme faisant partie de la surface du nœud. Comment détecter des événements clavier sur un nœud ? Vous devez surcharger l’un des callback de la classe javax.scene.Node.
Par exemple : Code :
Vous devez surcharger l’un des callback de la classe javax.scene.Node .
Code :
Il existe plusieurs moyens de grouper des nœuds. Note : les groupements sont eux-mêmes des nœuds il est donc possible de les mettre dans d’autres groupements. Il est possible d’utiliser la classe javafx.scene.Group : Code :
Il est également possible d’utiliser la classe javafx.scene.layout.HBox qui est une classe dérivée de Group. Code :
Il est également possible d’utiliser la classe javafx.scene.layout.VBox qui est une classe dérivée de Group. Code :
Enfin il est possible d’utiliser une classe dérivée de la classe abstraite javafx.scene.layout.Container. Un conteneur est un groupe dont l’agencement interne est laissé à la charge de son implémentation concrète. Un conteneur a une taille fixée explicitement par le programmeur et tous les nœuds qui sortent de sa boite englobante seront coupés à l’affichage. Il n’existe pas actuellement d’implémentation concrète fournie dans l’API JavaFX 1.0, vous devez donc programmer votre propre mise en page si vous choisissez cette solution.
__________________
Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes. suivez mon blog sur Développez.Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook |
||||||||||
|
00
|
|
|
#18 | ||||||||||||
![]() ![]() Fabrice BouyéDéveloppeur Java Inscription : août 2005 Messages : 4 078 ![]() |
Note j'ai ecrit constante pour __DIR__ et __FILE__ mais vu que la doc n'en parle pas il se peut que ce soit des closure. Il faudrait voir si le resultat change en fonction du package ou de la classe dans lequel on les utilise.
Comment savoir quelle est la classe contenant le script exécuté ? Vous devez utiliser la constante globale __FILE__. Comment bloquer les événements de la souris ? Par défaut, les événements de souris tels que les clics vont traverser tous les nœuds superposés ce qui peut être gênant si vous avez deux nœuds avec des callback personnalisés qui se chevauchent. Cela peut être encore plus problématique si vous avez intégré un composant Swing à votre scène. Vous devez mettre le champ blocksMouse de votre nœud à true pour éviter que les événements ne soient propagé aux autres nœuds qui se trouvent sous lui. Comment afficher du texte ? Vous devez utiliser la classe javafx.scene.text.Text. Text est une classe qui hérite de Node et cet objet peut donc être placé dans une scène et manipulé comme n’importe quel autre nœud. Code :
Il est possible de spécifier du texte sur plusieurs lignes en séparant chaque ligne de texte par un caractère ‘\n’. Par exemple : Code :
Il est possible de modifier le champ font d’un objet Text en lui donnant une valeur de type javafx.scene.text.Font. Une police peut être crée directement en initialisant ses différents champs de manière similaire au code suivant : Code :
Code :
Comment afficher une image ? Vous devez utiliser la classe javafx.scene.image.ImageView dans lequel vous devez mettre un objet de type javafx.scene.image.Image. ImageView est une classe qui hérite de Node et cet objet peut donc être placé dans une scène et manipulé comme n’importe quel autre nœud. Par exemple dans le code suivant le fichier image se trouve dans le même package que le script : Code :
Comment jouer du son ? Vous devez déclarer un objet de type javafx.scene.media.Media qui pointe vers votre fichier sonore et utiliser un javafx.scene.media.MediaPlayer pour le lire. Par exemple dans le code suivant le fichier sonore se trouve dans le même package que le script : Code :
Si le fichier sonore n’est pas trouvé des exceptions seront levées sur la console mais comme la classe Media fonctionne de manière asynchrone le code s’exécutera jusqu’au bout (mais aucun son ne sera joué bien sur).
__________________
Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes. suivez mon blog sur Développez.Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook |
||||||||||||
|
00
|
|
|
#19 | ||||||||||||||||
![]() ![]() Fabrice BouyéDéveloppeur Java Inscription : août 2005 Messages : 4 078 ![]() |
Comment utiliser l’API Java 1.6 avec JavaFX 1.0 ou 1.1 ?
Par défaut les SDK de JavaFX 1.0 et 1.1, ainsi que les modules NetBeans permettant de faire du JavaFX, sont distribués avec une version allégée de rt.jar (le JAR contenant toute l’API standard Java) ce qui permet de compiler du JavaFX sans devoir disposer du SDK Java (JDK). Ce fichier se trouve dans <chemin d’installation du javaFX SDK >/lib/desktop/rt15.jar ou dans <chemin d’installation de NetBeans>/javafx2/javafx-sdk/lib/desktop/rt15.jar Le problème est que, comme son nom l’indique, ce fichier contient en fait l’API Java 1.5 ce qui empêche d’utiliser l’API Java 1.6 avec les outils de développement actuels. Attention, cela empêche uniquement la compilation du code utilisant l’API 1.6. Lors de l’exécution, JavaFX utilisera la dernière version de Java présente sur votre système de toute manière. La solution à ce problème consiste en :
Comment étendre des interfaces Java ou classes Java en JavaFX ? Pour étendre des interfaces, classes abstraites ou classes Java en JavaFX, vous devez utiliser le nom-clé extends exactement comme si vous étendiez des classes écrites en JavaFX. Cependant pour connaître les méthodes que vous devez implémenter, vous devrez vous référer à la documentation de l’API Java (javadoc) qui est disponible en ligne aux URL suivantes :
Il est ainsi possible de créer une classe JavaFX qui implémente un écouteur Java pour répondre à des événements divers. Par exemple le code suivant affiche un JButton dans une scène (ce code est un exemple, n’oubliez pas que JavaFX fourni le nœud javafx.ext.swing.SwingButton pour éviter de faire ce genre de choses manuellement) : Code :
Code :
Code :
public void actionPerformed(ActionEvent event) ; Code :
override public function actionPerformed(e:ActionEvent):Void; Code :
Il en va de même pour toutes les signatures de méthodes définies dans des interfaces Java, toutes les méthodes abstraites définies dans des classes abstraites Java que vous serez amené à définir ainsi que toute les méthodes définies dans des classes Java que vous serez amené à surcharger dans vos classes JavaFX. Comment utiliser des Generics ? Le langage JavaFX ne supporte pas les Generics pour le moment, vous devez donc utiliser les classes Java utilisant des générics sans spécifier de type. Dans les faits c’est comme si leur type générique était le type java.lang.Object. Si vous avez besoin de récupérer un type particulier il vous faudra donc le caster en utilisant le mot-clé as. Étant donné que vous perdez le contrôle supplémentaire que vous offre le support des Generics au moment de la compilation, vous devez être très attentif lors de vos casts. Ainsi, il est impossible de définir : Code :
Vous devrez utiliser le code suivant à la place : Code :
Ainsi le code suivant compilera sans aucun problème mais générera une ClassCastException lors de l’exécution : Code :
var result1: String = jfxMap.get("1") as String; Code :
Code :
Par exemple, le code suivant ne compilera pas : Code :
__________________
Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes. suivez mon blog sur Développez.Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook |
||||||||||||||||
|
00
|
|
|
#20 | ||||||||||||||||||||
![]() ![]() Fabrice BouyéDéveloppeur Java Inscription : août 2005 Messages : 4 078 ![]() |
Comment utiliser l’interpréteur de script JavaFX dans le ScriptingEngine (Java 6) ?
Le moteur de scripting fourni depuis la version 1.6 de Java est capable d’interpréter du code écrit dans un language de scripting. Par défaut, le seul moteur fourni avec la JVM est le moteur capable d'interpréter le langage ECMAScript (JavaScript). Le SDK de JavaFX fourni les classes nécessaires à l’ajout d’un interpréteur pour le langage JavaFX. Cependant, par défaut, tant en Java qu’en JavaFX, l’interpréteur n’est pas ajouté au CLASSPATH de la JVM. Ainsi les lignes de code suivantes listent les moteurs de scripts disponibles dans la JVM :
Code :
La seul chose à faire est de l’ajouter au CLASSPATH, et désormais le code précédent listera le moteur de script JavaFX en plus de celui d’ECMAScript : Code :
Une fois le moteur de script rajouté à la JVM, il est possible de récupérer un interpréteur pour JavaFX en faisant : Code :
Code :
Il nous est à présent possible d’interpréter du JavaFX dans du JavaFX. Par exemple le code suivant ouvrira une fenêtre : Code :
Comment instancier et utiliser un interpréteur JavaFX en Java ? Une fois le moteur de script rajouté à la JVM, il est possible de récupérer un interpréteur pour JavaFX en faisant : Code :
Code :
De plus, pour pouvoir utiliser l’API JavaFX, il faudra rajouter les fichiers JARs de l’API JavaFX ainsi que ceux du profile utilisé dans le CLASSPATH, par exemple en modifiant les dépendances de votre projet. Sinon par défaut vous ne pourrez utiliser que l’API Java. Dans JavaFX 1.0 et 1.1, ces fichiers sont localisés dans le répertoire <chemin d’installation du SDK de JavaFX >/lib/ ainsi que ses sous-répertoires. Il nous est à présent possible d’interpréter du JavaFX dans du Java. Par exemple le code suivant ouvrira une fenêtre : Code :
__________________
Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes. suivez mon blog sur Développez.Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook |
||||||||||||||||||||
|
00
|
Copyright © 2000-2013 - www.developpez.com