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...

Voici le code complet :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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