JavaFX将图像拖放到GridPane中(FXML,控制器类)

我目前正在开发一款游戏,该游戏的运行方式与此处已经问到的一款游戏类似:JavaFX Drag and drop to GridPane?

我有一个拆分窗格,左边有一个Gridpane,右边有一些Images(Imageview)。 我想将图像拖到网格窗格中的字段。

我是JavaFX的新手,尤其是Gridpane和拖放。这就是为什么我要处理很多已经问到的问题的代码的原因。

我试图将这些示例中的代码改编成我的Controller类,但是它不起作用。

编辑:

网格中的字段是否是一个对象,这意味着我可以说诸如event.getTarget = Image之类的东西吗?还是我必须在可以处理的字段中设置对象/节点?

编辑:

控制器类:

 import javafx.fxml.FXML;
import javafx.scene.Node;
import javafx.scene.image.ImageView;
import javafx.scene.input.MouseEvent;
import javafx.scene.input.TransferMode;
import javafx.scene.layout.GridPane;
import javafx.scene.input.ClipboardContent;
import javafx.scene.input.DragEvent;
import javafx.scene.input.Dragboard;

public class FXMLSTPreFieldController {
    @FXML
    private ImageView bomb;
    public GridPane Board;


    final GridPane target = Board;

    // Event Listener on ImageView[#bomb].onDragDetected
    @FXML
    public void Drag(MouseEvent event) {
        Dragboard db = bomb.startDragAndDrop(TransferMode.MOVE);

        ClipboardContent content = new ClipboardContent();
        content.putImage(bomb.getImage());
        db.setContent(content);

        event.consume();
    }

    @FXML
    public void Over(DragEvent event) {
         if(event.getGestureSource() != target && event.getDragboard().hasImage()){
             // moving
             event.acceptTransferModes(TransferMode.MOVE);
         }
         event.consume();
    }


    @FXML
    public void Drop(DragEvent event) {
        //Data drop
        Dragboard db = event.getDragboard();
        boolean success = false;
        Node node = event.getPickResult().getIntersectedNode();
        if(node != target && db.hasImage()){

            Integer cIndex = GridPane.getcolumnIndex(node);
            Integer rIndex = GridPane.getRowIndex(node);
            int x = cIndex == null ? 0 : cIndex;
            int y = rIndex == null ? 0 : rIndex;
            target.add(bomb,x,y);

            ImageView bomb = new ImageView(db.getImage());

            Board.add(bomb,y,1,1);
            success = true;
        }
        event.setDropCompleted(success);

        event.consume();
    }

    @FXML
    public void Exit(DragEvent event) {
//        //mouse moved away,remove graphical cues
//        bomb.setVisible(true);
//        target.setOpacity(1);
//
//        event.consume();
    }

    @FXML
    public void handle(DragEvent event) {
        //The drag-and-drop gesture entered the target
        //show the user that it is an actual gesture target
        if(event.getGestureSource() != target && event.getDragboard().hasImage()){
            bomb.setVisible(false);
            target.setOpacity(0.7);
            System.out.println("Drag entered");
        }
        event.consume();
    }

    @FXML
     public void Done(DragEvent event) {
        //the drag and drop gesture has ended
        //if the data was successfully moved,clear it
        if(event.getTransferMode() == TransferMode.MOVE){
            bomb.setVisible(false);
        }
        event.consume();
    }

}

jianglongdi 回答:JavaFX将图像拖放到GridPane中(FXML,控制器类)

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/2989726.html

大家都在问