サークルのグリッドペインがあり、別のサークルの上に1つのサークルをドラッグし、最初のサークルの色を2番目のサークルに適用したいと考えています。JavaFXシェイプを別のシェイプにドラッグアンドドロップする
問題は、私がdragEnteredまたはdragOverを検出するターゲットサークルを取得できないことです。私はこれをLabelsを使ってうまく実装することができましたが、何らかの理由でCircleが同じ効果を与えない。
ノードのの下にドラッグされたノードがドラッグを表示できるようにcircle.setMouseTransparent(true)を設定することを含むいくつかの準解決法が見られましたが、ここでも運がありません。ここで
は、ラベルを使用して同じようなことを行うコードへのリンクです:Hello Drag and Drop
は、ここに私のコードの適用抜粋です:
circle.setOnDragDetected(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
Dragboard db = circle.startDragAndDrop(TransferMode.ANY);
System.out.print("Dragging...");
System.out.println("From row: " + draggedFromRow + " From col: " + draggedFromCol);
circle.setLayoutX(event.getSceneX());
circle.setLayoutY(event.getSceneY());
event.consume();
}
});
circle.setOnDragOver(new EventHandler <DragEvent>() {
public void handle(DragEvent event) {
System.out.println("onDragOver");
event.acceptTransferModes(TransferMode.ANY);
event.consume();
}
});
circle.setOnDragDropped(new EventHandler<DragEvent>() {
@Override
public void handle(DragEvent event) {
int toCol = Integer.valueOf(circle.getId().substring(0, 1));
int toRow = Integer.valueOf(circle.getId().substring(1));
performSwap(draggedFromRow, draggedFromCol, toRow, toCol);
System.out.print("Dragg dropped on ");
System.out.println(toRow + " " + toCol);
event.consume();
}
});
circle.setOnDragEntered(new EventHandler<DragEvent>() {
public void handle(DragEvent event) {
System.out.println("drag entered!");
event.consume();
}
});
circle.setOnDragExited(new EventHandler<DragEvent>() {
public void handle(DragEvent event) {
System.out.println("drag left!");
event.consume();
}
});
を問題を再現[MCVE]またはSSCCEを投稿してください。 これにより、役に立つ回答が得られる可能性が高くなります(問題の発見に役立つ場合もあります)。 – c0der
ドラッグボードにデータを入れない限り、IIRCのドラッグアンドドロップは実際には開始されません。 –
James_D、これは私の問題を解決しました。ドラッグ・アンド・ドロップが起こっていることを登録させるには、そこにそれが必要だと誰が思うでしょう。たぶん私はドキュメントでそれを見逃してしまったでしょう。ありがとう! –