2016-06-15 2 views
0

construire une application javaFX qui obtient les emplacements, la largeur et la profondeur des rectangles de la base de données afin de dessiner la base de données contient des rectangles posX, posY, largeur et profondeur en fonction de la largeur et de la profondeur J'ai pu dessiner les rectangles en fonction du panneau sur lequel je dessine localement, le problème est, je ne sais pas comment mettre à jour la base de données avec les nouvelles valeurs quand un rectangle est traîné, car je devrais les transformer en coordination réelle, le Comment convertir les rectangles actuels x et y en actuels? afin de les enregistrer dans la base de données.JavaFX enregistrer l'emplacement des nœuds draggables


est-il plus facile ou préférable d'utiliser la toile? comme je ne sais rien sur la toile jusqu'ici

Répondre

1

Vous pouvez créer un mousehandler setOnMouseReleased et utiliser une méthode fixPostion() qui calcule la position actuelle en utilisant la position actuelle plus la position traduite.

EventHandler<MouseEvent> onMouseReleasedEventHandler = new EventHandler<MouseEvent>() { 

    @Override 
    public void handle(MouseEvent t) { 

    fixPosition((Node) t.getSource()); 

    } 
}; 

resource.setOnMouseReleased(onMouseReleasedEventHandler); 

private void fixPosition(Node node) { 

    double x = node.getTranslateX(); 
    double y = node.getTranslateY(); 

    node.relocate(node.getLayoutX() + x, node.getLayoutY() + y); 

    node.setTranslateX(0); 
    node.setTranslateY(0); 

} 
+0

la chose est node.getLayoutX() et node.getLayoutY() sont toujours 0? pourquoi est-ce>? –

+0

serait-il préférable de mettre en œuvre en utilisant la toile? merci à l'avance –

+1

Ils sont 0 parce que vous positionnez tout en utilisant les méthodes translate et ignorez l'emplacement layoutX/Y. En d'autres termes, l'emplacement final = [layoutX] (https://docs.oracle.com/javase/8/javafx/api/javafx/scene/Node.html#layoutXProperty) + [translateX] (https: // docs .oracle.com/javase/8/javafx/api/javafx/scène/Node.html # setTranslateX-double-). imo n'utilise pas de toile, c'est plus de travail pour toi. Aussi, je vous suggère de lire à propos de la classe [Node] (https://docs.oracle.com/javase/8/javafx/api/javafx/scene/Node.html). – Roland