Во-первых, очень быстрое предложение, почему у вас есть пять отдельных циклов «for» для установки разных обработчиков перетаскивания для одного и того же набора узлов.Вы можете делать все только в одном цикле for.
for(Node target: playerGrid.getChildren()) {
if(target.getId() != null) {
target.setOnDragOver(..);
target.setOnDragEntered(..);
target.setOnDragExited(..);
target.setOnDragDropped(..);
target.setOnDragDone(..);
}
}
Переходя к актуальному вопросу, чтобы изменить размер изображения и установить его на панели, вы можете использовать функцию «снимок».Проверьте приведенный ниже код, чтобы установить измененное изображение в dragboard.
double displaySize = 150;
double dragSize = 50;
ImageView pictureOne = new ImageView(new Image(ImageDragDemo.class.getResourceAsStream(imgName)));
pictureOne.setFitHeight(displaySize);
pictureOne.setFitWidth(displaySize);
pictureOne.setOnDragDetected(event -> {
Dragboard db = pictureOne.startDragAndDrop(TransferMode.ANY);
ClipboardContent content = new ClipboardContent();
// Resizing the image to required size before taking the snapshot.
pictureOne.setFitHeight(dragSize);
pictureOne.setFitWidth(dragSize);
content.putImage(pictureOne.snapshot(null,null));
// Resetting the image to initial size after taking the snapshot.
pictureOne.setFitHeight(displaySize);
pictureOne.setFitWidth(displaySize);
db.setContent(content);
event.consume();
});
Если вы не заинтересованы в реализации для изменения размера изображения, вы можете создать новый ImageView и сделать снимок.
ImageView dragImage = new ImageView(pictureOne.getImage());
dragImage.setFitHeight(dragSize);
dragImage.setFitWidth(dragSize);
content.putImage(dragImage.snapshot(null,null));
Что касается другого вопроса не показа изображения, я думаю, что вы можете установить любой контент STRING и проверить его вместо использования event.getDragboard (). HasImage ().Нечто подобное ..
// Instead of content.putImage(..) use
content.putString("DRAG_IMAGE");
..
// And instead of checking using event.getDragboard().hasImage() use
event.getDragboard().hasString() && event.getDragboard().getString().equals("DRAG_IMAGE")