将图像从 imageview1 拖放到锚窗格上的 imageview2
drag and drop image from imageview1 to imageview2 on anchorpane
scenebuilder 中的 AnchorPane 上有两个图像视图。一个图像视图 1 有图像
现在尝试在 imageview2 上拖放。
public class FXMLDocumentController implements Initializable {
@FXML
private ImageView imageview1;
@FXML
private ImageView imageview2;
@Override
public void initialize(URL url, ResourceBundle rb) {
imageview1.setImage(new Image("File:///C:imagedragndropex6/IMG_4093.JPG"));
}
@FXML
private void handleDragDetected(MouseEvent event) {
System.out.println("DragDetectedEntered");
// ImageView im=(ImageView)event.getSource();
Image img=imageview1.getImage();
Dragboard db= imageview1.startDragAndDrop(TransferMode.COPY);
// db.setDragView(imageview1.getImage());
ClipboardContent content=new ClipboardContent();
content.putImage(img);
System.out.println(content.hasImage());
db.setContent(content);
System.out.println(db.hasImage());
System.out.println("DragDetectedExited");
}
@FXML
private void handleDragOver(DragEvent event) {
System.out.println("DragOverEntered");
Dragboard db=event.getDragboard();
System.out.println(db.hasImage());
if(db.hasImage()){
event.acceptTransferModes(TransferMode.COPY);
System.out.println(event.getAcceptedTransferMode());
}
event.consume();
System.out.println("DragOverExited");
}
@FXML
private void handleDragDropped(DragEvent event) {
System.out.println("DragDroppedrEntered");
Dragboard dragboard=event.getDragboard();
if(dragboard.hasImage()){
Image img=dragboard.getImage();
imageview2.setFitHeight(200);
imageview2.setFitWidth(200);
imageview2.setPreserveRatio(true);
imageview2.setImage(img);
event.setDropCompleted(true);
}
else
event.setDropCompleted(false);
System.out.println("DragDroppedrEntered");
}
}
输出:
DragDetectedEntered
true
true
DragDetectedExited
DragOverEntered
false
DragOverExited
请让我知道这个尝试了几个小时有什么问题...
public class FXMLDocumentController 实现 Initializable {
@FXML
private ImageView imageview1;
@FXML
private AnchorPane anchorpane;
@Override
public void initialize(URL url, ResourceBundle rb) {
imageview1.setImage(new Image("File:///D:/Downloads/Earthpic.jpg"));
// TODO
}
@FXML
private void handleDragDetected(MouseEvent event) {
System.out.println("DragDetectedEntered");
Dragboard db= imageview1.startDragAndDrop(TransferMode.COPY_OR_MOVE);
Image img=imageview1.getImage();
ClipboardContent content=new ClipboardContent();
content.putImage(img);
System.out.println(content.hasImage());
db.setContent(content);
System.out.println(db.hasImage());
System.out.println("DragDetectedExited");
event.consume();
}
@FXML
private void handleDragOver(DragEvent event) {
System.out.println("DragOverEntered");
System.out.println(event.getGestureSource());
System.out.println(event.getGestureTarget());
Dragboard db=event.getDragboard();
System.out.println(db.hasImage());
if(db.hasImage()){
event.acceptTransferModes(TransferMode.COPY_OR_MOVE);
System.out.println(event.getAcceptedTransferMode());
}
event.consume();
System.out.println("DragOverExited");
}
@FXML
private void handleDragDropped(DragEvent event) {
System.out.println("DragDroppedrEntered");
Dragboard dragboard=event.getDragboard();
if(dragboard.hasImage()){
Image img=dragboard.getImage();
ImageView imageview2=new ImageView();
imageview2.setFitHeight(200);
imageview2.setFitWidth(200);
imageview2.setLayoutX(400);
imageview2.setLayoutY(150);
imageview2.setPreserveRatio(true);
imageview2.setImage(img);
anchorpane.getChildren().add(imageview2);
event.setDropCompleted(true);
}
else
event.setDropCompleted(false);
System.out.println("DragDroppedrEntered");
}
}
最后,这工作正常...必须将 handleDragOver 和 handleDragDropped 设置为 anchorpane。
scenebuilder 中的 AnchorPane 上有两个图像视图。一个图像视图 1 有图像 现在尝试在 imageview2 上拖放。
public class FXMLDocumentController implements Initializable {
@FXML
private ImageView imageview1;
@FXML
private ImageView imageview2;
@Override
public void initialize(URL url, ResourceBundle rb) {
imageview1.setImage(new Image("File:///C:imagedragndropex6/IMG_4093.JPG"));
}
@FXML
private void handleDragDetected(MouseEvent event) {
System.out.println("DragDetectedEntered");
// ImageView im=(ImageView)event.getSource();
Image img=imageview1.getImage();
Dragboard db= imageview1.startDragAndDrop(TransferMode.COPY);
// db.setDragView(imageview1.getImage());
ClipboardContent content=new ClipboardContent();
content.putImage(img);
System.out.println(content.hasImage());
db.setContent(content);
System.out.println(db.hasImage());
System.out.println("DragDetectedExited");
}
@FXML
private void handleDragOver(DragEvent event) {
System.out.println("DragOverEntered");
Dragboard db=event.getDragboard();
System.out.println(db.hasImage());
if(db.hasImage()){
event.acceptTransferModes(TransferMode.COPY);
System.out.println(event.getAcceptedTransferMode());
}
event.consume();
System.out.println("DragOverExited");
}
@FXML
private void handleDragDropped(DragEvent event) {
System.out.println("DragDroppedrEntered");
Dragboard dragboard=event.getDragboard();
if(dragboard.hasImage()){
Image img=dragboard.getImage();
imageview2.setFitHeight(200);
imageview2.setFitWidth(200);
imageview2.setPreserveRatio(true);
imageview2.setImage(img);
event.setDropCompleted(true);
}
else
event.setDropCompleted(false);
System.out.println("DragDroppedrEntered");
}
}
输出:
DragDetectedEntered
true
true
DragDetectedExited
DragOverEntered
false
DragOverExited
请让我知道这个尝试了几个小时有什么问题...
public class FXMLDocumentController 实现 Initializable {
@FXML
private ImageView imageview1;
@FXML
private AnchorPane anchorpane;
@Override
public void initialize(URL url, ResourceBundle rb) {
imageview1.setImage(new Image("File:///D:/Downloads/Earthpic.jpg"));
// TODO
}
@FXML
private void handleDragDetected(MouseEvent event) {
System.out.println("DragDetectedEntered");
Dragboard db= imageview1.startDragAndDrop(TransferMode.COPY_OR_MOVE);
Image img=imageview1.getImage();
ClipboardContent content=new ClipboardContent();
content.putImage(img);
System.out.println(content.hasImage());
db.setContent(content);
System.out.println(db.hasImage());
System.out.println("DragDetectedExited");
event.consume();
}
@FXML
private void handleDragOver(DragEvent event) {
System.out.println("DragOverEntered");
System.out.println(event.getGestureSource());
System.out.println(event.getGestureTarget());
Dragboard db=event.getDragboard();
System.out.println(db.hasImage());
if(db.hasImage()){
event.acceptTransferModes(TransferMode.COPY_OR_MOVE);
System.out.println(event.getAcceptedTransferMode());
}
event.consume();
System.out.println("DragOverExited");
}
@FXML
private void handleDragDropped(DragEvent event) {
System.out.println("DragDroppedrEntered");
Dragboard dragboard=event.getDragboard();
if(dragboard.hasImage()){
Image img=dragboard.getImage();
ImageView imageview2=new ImageView();
imageview2.setFitHeight(200);
imageview2.setFitWidth(200);
imageview2.setLayoutX(400);
imageview2.setLayoutY(150);
imageview2.setPreserveRatio(true);
imageview2.setImage(img);
anchorpane.getChildren().add(imageview2);
event.setDropCompleted(true);
}
else
event.setDropCompleted(false);
System.out.println("DragDroppedrEntered");
}
}
最后,这工作正常...必须将 handleDragOver 和 handleDragDropped 设置为 anchorpane。