Les périgrinations codesques d'un télé médecin

Dirigeant le laboratoire de télémédecine de l'Ifremmont depuis 2005 j'explore les différents champs des technologies de l'information afin de soutenir au mieux nos projets de recherche. Vous trouverez ici, pèle mêle, des bouts de code, de vrais logiciels publiés sous licence GPL ou Mozilla, des remarques diverses et variées sur les technologies télé médicales. Le but reste toujours le même apporté au plus grand nombre des outils offrant un meilleur accès aux soins. Pour des considérations plus générales sur la médecine de Montagne, je vous donne rendez vous ici.

mercredi 13 octobre 2010

Java FX Drag & Drop de la fenêtre principale

Dans le cadre des applicatifs RIA qui seront connectés au projet Res@Core je teste depuis peu Java FX au travers de NetBean 6.9.1. Les démos sont assez alléchantes et le fait de pouvoir réutiliser assez facilement les classes Java du projet (en comparaison de Flex ou de WPF) me conduise à tenter l'aventure. Après quelques tests dans une fenêtre classique je décide de passer à quelque chose de plus beau et essaye de faire aussi bien qu'avec les concurrents : une fenêtre à bords transparent que l'on peut déplacer sur l'écran. La prochaine étape sera de redimensionner cette magnifique fenêtre.

Étape 1 : rendre les bords de la fenêtre transparents

La FAQ JavaFX de Developpez.com donne la solution (au milieu de pas  mal d'autres astuces) que l'on retrouve également dans la documentation en ligne. NetBean n'affiche pas toutes les propriétés des noeuds et il faut parfois modifier ces dernières directement dans le code à l'aide de l'attribut StageStyle  de l'objet stage qui peut prendre trois valeurs différentes : 

  • DECORED : la fenêtre a des bords, des boutons maximiser, minimiser et fermer.
  • UNDECORED : la fenêtre a des bords et uniquement un bouton fermer.
  • TRANSPARENT : les bords disparissent et il n'y a pas de bouton.

Je vous laisserais essayer avec l'exemple ci dessous ou la scène contient deux nœuds un panel et un rectangle noir. En modifiant la propriété ci dessus on obtient la fenêtre désirée. Notre application est donc à bords transparents. Passons à la seconde étape.

Étape 2 : Drag & Drop de la fenêtre transparente sur la totalité de l'écran
Nous allons utiliser le rectangle (tout autre nœud ferait l'affaire en fait)  pour déclencher le drag & drop. Pour cela nous utilisons deux évènements liés au rectangle : OnMousePressed lorsqu'on laisse le bouton de la souris enclenché sur le rectangle, puis ensuite OnMouseDragged lorsque l'on bouge la souris.


Les deux variables stageDragInitialX et stageDragInitialY stocke la position initiale de la souris grâce aux propriétés screenX et screenY de l'évènement capturé. Le mouvement de la souris  recalcule automatiquement les coordonnées de l'objet stage et le déplace en conséquence. Nous avons donc une fenêtre à bord transparents que l'on peut Drag&Dropper n'importe où dans l'écran.


Aucun commentaire: