IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaFX Discussion :

Source du drag & drop ?


Sujet :

JavaFX

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2014
    Messages : 47
    Points : 31
    Points
    31
    Par défaut Source du drag & drop ?
    Bonjour,

    J'ai un petit soucis concernant le drag & drop, j'aimerais savoir d'ou provient l'objet que j'ai au bout de ma souris pour agir différemment en fonction qu'il vienne de tel ou tel endroit ...
    J'ai 2 listeners setOnDragDetected, un sur l'objet en question et un autre sur le même type d'objet mais contenu dans un autre objet.
    J'ai pensé au String que l'on indique dans le ClipboardContent mais je ne sais pas si c'est bien cet objet là qu'on récupère dans les autres listeners (Over, Exited, Entered, Dropped) et si c'est le cas comment on récupère cette valeur.

    Merci

  2. #2
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 838
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 838
    Points : 22 846
    Points
    22 846
    Billets dans le blog
    51
    Par défaut
    Regarde du coté du membre source de l'objet DragEvent peut-être.
    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

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2014
    Messages : 47
    Points : 31
    Points
    31
    Par défaut
    J'ai déjà testé mais il me renvoie l'objet qui écoute (?) le setOnDragOver() mais ça ne m'arrange pas du tout
    J'ai donc utilisé le string enregistré dans le Dragboard
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    this.setOnDragOver(dragEvent -> {
          Dragboard db = dragEvent.getDragboard();
          if (!db.getString().contains(string))
               ...
    }
    Je ne sais pas si c'est le meilleur moyen mais bon ...

    J'en profite pour poser une autre question, est-il possible de gérer un click droit de la souris pendant un drag & drop ? ou un KeyEvent ? Comment fait-on ?

  4. #4
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 838
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 838
    Points : 22 846
    Points
    22 846
    Billets dans le blog
    51
    Par défaut
    Alors la source de l'événement est retournée par la méthode getGestureSource().

    Et j'ai pile trouvé ça alors que je programmais un test pour te montrer comment faire en utilisant un DataFormat customisé plutot que DataFormat.PLAINT_TEXT (qui est utilisé par la méthode putString() ou getString()). L’intérêt d'un type customisé est justement que ça évite de rendre l'info disponible pour d'autres types de contrôles (ou même des app externes) qui elles acceptent du texte.

    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
    public class Main extends Application {
     
        public final static DataFormat DND_SOURCE_FORMAT = new DataFormat("dnd-source");
     
        @Override
        public void start(Stage primaryStage) {
            final Pane source1 = new Pane();
            source1.setId("source1");
            source1.setStyle("-fx-background-color: red; -fx-border-color: red;");
            source1.setOnDragDetected(mouseEvent -> startDnD(mouseEvent, source1));
            HBox.setHgrow(source1, Priority.ALWAYS);
            final Pane source2 = new Pane();
            source2.setId("source2");
            source2.setStyle("-fx-background-color: blue; -fx-border-color: blue;");
            source2.setOnDragDetected(mouseEvent -> startDnD(mouseEvent, source2));
            HBox.setHgrow(source2, Priority.ALWAYS);
            final Pane target = new Pane();
            target.setId("target");
            target.setStyle("-fx-background-color: green; -fx-border-color: green;");
            target.setOnDragOver(dragEvent -> handleDragOver(dragEvent, target));
            target.setOnDragDropped(dragEvent -> handleDragDropped(dragEvent, target));
            VBox.setVgrow(target, Priority.ALWAYS);
            final HBox source = new HBox(source1, source2);
            source.setFillHeight(true);
            VBox.setVgrow(source, Priority.ALWAYS);
            final VBox root = new VBox(source, target);
            root.setFillWidth(true);
            final Scene scene = new Scene(root, 500, 500);
            primaryStage.setTitle("Hello World!");
            primaryStage.setScene(scene);
            primaryStage.show();
        }
     
        private void startDnD(MouseEvent mouseEvent, Node source) {
            final Dragboard dragboard = source.startDragAndDrop(TransferMode.ANY);
            final ClipboardContent content = new ClipboardContent();
            content.put(DND_SOURCE_FORMAT, source.getId());
            dragboard.setContent(content);
            mouseEvent.consume();
        }
     
        private void handleDragOver(DragEvent dragEvent, Node target) {
            final Dragboard dragboard = dragEvent.getDragboard();
            if (dragEvent.getGestureSource() != target && dragboard.hasContent(DND_SOURCE_FORMAT)) {
                dragEvent.acceptTransferModes(TransferMode.COPY_OR_MOVE);
            }
            dragEvent.consume();
        }
     
        private void handleDragDropped(DragEvent dragEvent, Node target) {
            final Dragboard dragboard = dragEvent.getDragboard();
            boolean success = false;
            if (dragboard.hasContent(DND_SOURCE_FORMAT)) {
                System.out.println(dragboard.getContent(DND_SOURCE_FORMAT));
                System.out.println(dragEvent.getGestureSource());
                success = true;
            }
            dragEvent.setDropCompleted(success);
            dragEvent.consume();
        }
     
        public static void main(String[] args) {
            launch(args);
        }
    }
    Pour ce qui est de la souris par contre pas trop d'idée à part mettre les listeners habituels et tester pour savoir s'ils s'activent lorsque dragDropped() a lieu.
    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

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2014
    Messages : 47
    Points : 31
    Points
    31
    Par défaut
    Super, merci !

    J'ai encore une question par rapport à ces DnD ... J'aimerais effectuer une action à la fin du DnD que celui ci soit achevé ou pas.
    Mais je ne sais pas ou effectuer cette action ... L'event DRAG_DROPPED ne se déclenche que lorsque la méthode acceptTransferModes() a été appelée auparavant
    et l'event DRAG_DONE ne se déclenche que sur la source et non sur la target (ce qu'il me faut...)

    Une idée ?

  6. #6
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 838
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 838
    Points : 22 846
    Points
    22 846
    Billets dans le blog
    51
    Par défaut
    Pareil dans ce cas, vu que ça sort du cadre de l'API, c'est plutôt du coté des évents souris qu'il faudrait voir je pense.
    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

Discussions similaires

  1. [Dojo] Lors d'un drag'n'drop, tous les éléments de la source bougent
    Par tapoutapou dans le forum Bibliothèques & Frameworks
    Réponses: 3
    Dernier message: 12/08/2010, 10h44
  2. [SWT] Drag and Drop: lier la source à la cible
    Par benoit31 dans le forum SWT/JFace
    Réponses: 0
    Dernier message: 28/04/2010, 17h31
  3. Réponses: 0
    Dernier message: 30/09/2009, 21h25
  4. [Drag and drop] - Retrouver la source
    Par Anto03 dans le forum Windows Presentation Foundation
    Réponses: 7
    Dernier message: 17/11/2008, 12h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo