[Débutant] Empêcher le déplacement d'un panel hors des limites de la Frame
Bonjour,
j'essaye en JavaFX de réaliser un Panel déplaçable. Je suis presque arrivé à mes fins, seul un problème persiste.
En fait, j'ai fais en sorte que lorsque je déplace mon Panel, si sa position gauche (x) est inférieure à 0, j'annuler le déplacement. Ceci permet de de pas déborder de la Frame.
Ceci fonctionne pour la gauche et le haut de la Frame, mais pour la droite et le bas, il me faut récupérer les atrtibuts width et height de la Frame, mais je n'y parviens pas.
En espérant que quelqu'un aura compris mon problème, car ce n'est pas facile à expliquer... :oops:
Voici le code complet :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
|
package javafxapplication1;
import javafx.application.*;
import javafx.scene.*;
import javafx.scene.geometry.*;
import javafx.scene.paint.*;
import javafx.input.*;
import javafx.animation.*;
import javafx.scene.transform.Translate;
import java.lang.Math;
// Class to create a draggable group of objects
public class Panel extends CustomNode{
private attribute endX = 0.0;
private attribute endY = 0.0;
private attribute startX = 0.0;
private attribute startY = 0.0;
private attribute enteteRectWidth = 300;
private attribute enteteRectHieght = 30;
public function create(): Node {
return Group{
transform: bind Translate.translate(endX, endY);
//translateX: bind endX
//translateY: bind endY
content: [
Rectangle {
x: 0;
y: 0;
width: enteteRectWidth;
height: enteteRectHieght;
fill: Color.BLACK
onMousePressed: function(e:MouseEvent):Void {
startX = e.getDragX()-endX;
startY = e.getDragY()-endY;
}
onMouseDragged: function(e:MouseEvent):Void {
var tempEndX = e.getDragX()-startX;
//var maxEndX = frameWidth;// - enteteRectWidth;
if (tempEndX>=0 and tempEndX<=e.getStageX()) {
endX = tempEndX;
}
var tempEndY = e.getDragY()-startY;
if (tempEndY>=0 and tempEndY<=e.getStageY()) {
endY = tempEndY;
}
}
},
Rectangle {
x: 0;
y: 30;
width: 300;
height: 150;
fill: Color.GRAY
}
]
}
}
}
var frameWidth = 1024;
var frameHeight = 768;
Frame {
width: frameWidth
height: frameHeight
visible: true
stage: Stage {
//fill: Color.BLACK
content: [
Panel{}
]
}
closeAction: function() {
java.lang.System.exit( 0 );
}
} |
Merci d'avance ;)