1
私はチェスゲームを実装してJavaFXを学習しようとしています。 私の問題は、ドラッグ&ドロップでピースを移動する方法がわかりません。 私のコードでは、ラベルにImageViewが含まれているラベルの2D配列があります。 ドラッグした部分の下にある別の部分(ノード)を特定する方法を知りたい。 ありがとうございます。ノードを別のノードにドラッグアンドドロップする
私はチェスゲームを実装してJavaFXを学習しようとしています。 私の問題は、ドラッグ&ドロップでピースを移動する方法がわかりません。 私のコードでは、ラベルにImageViewが含まれているラベルの2D配列があります。 ドラッグした部分の下にある別の部分(ノード)を特定する方法を知りたい。 ありがとうございます。ノードを別のノードにドラッグアンドドロップする
基本的にドロップは、元のアイテムにdone.Finally setOnDragComplete()
あるときにターゲットメソッドに受け入れ、setOnDragDropped()
されTransferModeかを決定するために、ターゲット項目にsetOnDragOver()
を使用し、その後、ドラッグしたい項目にsetOnDragDetected()
方法を使用する必要がありますドラッグが成功したと判断します。
1)オラクルhere
2)素敵な一例here
3)を理解するのは容易である第二の例から、詳細はリンク:
/**
* Demonstrates a drag-and-drop feature.
*/
public class HelloDragAndDrop extends Application {
@Override
public void start(Stage stage) {
stage.setTitle("Hello Drag And Drop");
Group root = new Group();
Scene scene = new Scene(root, 400, 200);
scene.setFill(Color.LIGHTGREEN);
final Text source = new Text(50, 100, "DRAG ME");
source.setScaleX(2.0);
source.setScaleY(2.0);
final Text target = new Text(250, 100, "DROP HERE");
target.setScaleX(2.0);
target.setScaleY(2.0);
source.setOnDragDetected(event -> {
/* drag was detected, start drag-and-drop gesture */
System.out.println("onDragDetected");
/* allow any transfer mode */
Dragboard db = source.startDragAndDrop(TransferMode.ANY);
/* put a string on dragboard */
ClipboardContent content = new ClipboardContent();
content.putString(source.getText());
db.setContent(content);
event.consume();
});
target.setOnDragOver(event -> {
/* data is dragged over the target */
System.out.println("onDragOver");
/*
* accept it only if it is not dragged from the same node and if it
* has a string data
*/
if (event.getGestureSource() != target && event.getDragboard().hasString()) {
/* allow for both copying and moving, whatever user chooses */
event.acceptTransferModes(TransferMode.COPY_OR_MOVE);
}
event.consume();
});
target.setOnDragEntered(event -> {
/* the drag-and-drop gesture entered the target */
System.out.println("onDragEntered");
/* show to the user that it is an actual gesture target */
if (event.getGestureSource() != target && event.getDragboard().hasString()) {
target.setFill(Color.GREEN);
}
event.consume();
});
target.setOnDragExited(event -> {
/* mouse moved away, remove the graphical cues */
target.setFill(Color.BLACK);
event.consume();
});
target.setOnDragDropped(event -> {
/* data dropped */
System.out.println("onDragDropped");
/* if there is a string data on dragboard, read it and use it */
Dragboard db = event.getDragboard();
boolean success = false;
if (db.hasString()) {
target.setText(db.getString());
success = true;
}
/*
* let the source know whether the string was successfully
* transferred and used
*/
event.setDropCompleted(success);
event.consume();
});
source.setOnDragDone(event -> {
/* the drag-and-drop gesture ended */
System.out.println("onDragDone");
/* if the data was successfully moved, clear it */
if (event.getTransferMode() == TransferMode.MOVE) {
source.setText("");
}
event.consume();
});
root.getChildren().add(source);
root.getChildren().add(target);
stage.setScene(scene);
stage.show();
}
public static void main(String[] args) {
Application.launch(args);
}
}
をそれはとてもあなたをworked.Thank多くの場合 –
@ M.Sianaki答えがあなたのために働くときはそれを解決策としてマークします:) – GOXR3PLUS