不透明度を考慮して、白い背景をどのように達成するかわかりません。しかし、私はあなたのユースケースを再作成し、これをどのように実装したかを示します。
次の画像は、Scene
を左にAnchorPane
、右をHBox
に分割したものです。小さい透明な円は、コピーするソースImageView
であり、その隣に大きな円がドロップされたImage
であり、現在最も遠い円は現在ドラッグされています。 (スクリーンショットは、カーソルが含まれていませんでした。)
あなたが白(またはほとんど白)背景がある3つのシナリオのいずれにおいても、見ることができるように。それはイメージ自体であり、イメージ自体はドラッグ中に少し透明です。
これを達成するには、2つの変数を考慮します。ソースImageView
と宛先HBox
。
@FXML
private HBox destination;
@FXML
private ImageView image;
我々は、画像をドラッグすることがしたいと思いますので、私たちはImageView
にDRAG_DETECTED
イベントを追加します。
image.addEventHandler(MouseEvent.DRAG_DETECTED, mouseEvent -> {
Dragboard db = image.startDragAndDrop(TransferMode.COPY);
ClipboardContent content = new ClipboardContent();
content.putImage(image.getImage());
db.setContent(content);
mouseEvent.consume();
});
その後、我々はドラッグImageView
を受け入れるように先HBox
をしたいと思います。
destination.addEventHandler(DragEvent.DRAG_OVER, (DragEvent event) -> {
if (event.getDragboard().hasImage()) {
event.acceptTransferModes(TransferMode.COPY_OR_MOVE);
}
event.consume();
});
そしてもちろん、私たちは実際に低下したときHBox
にImageView
を配置したいと思います。この場合、そのコピーはHBox
に置かれますが、それはもちろん実装のために開いています。
destination.addEventHandler(DragEvent.DRAG_DROPPED, (DragEvent event) -> {
Dragboard db = event.getDragboard();
destination.getChildren().add(new ImageView(db.getImage()));
event.setDropCompleted(true);
event.consume();
});
画像をドラッグアンドドロップするだけです。透明な画像には、白い背景は含まれません。ただし、MCVEを作成できる場合は、それがまだ維持されていると問題を調べる方が簡単かもしれません。
'db.setDragView'を 'content.putImage'に変更し、ドラッグイメージが再び透明になりました。違いは何か分かりませんが、うまくいきます。 –