onDragOver
イベントが次の例で発生しないのはなぜですか?onDragOverが発生しない(JavaFXで)
最も簡単なドラッグビヘイビアを実装する方法、つまりクリップボードのものを使用しないでください。
import javafx.application.Application;
import javafx.event.EventHandler;
import javafx.geometry.*;
import javafx.scene.Scene;
import javafx.scene.input.DragEvent;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.Background;
import javafx.scene.layout.BackgroundFill;
import javafx.scene.layout.CornerRadii;
import javafx.scene.layout.Pane;
import javafx.scene.paint.*;
import javafx.stage.Stage;
public class DragTry extends Application {
private Point2D dragVector = null;
@Override
public void start(Stage primaryStage) throws Exception {
Pane root = new Pane();
Pane node = new Pane();
node.setBackground(new Background(new BackgroundFill(Color.BLUE, CornerRadii.EMPTY, javafx.geometry.Insets.EMPTY)));
node.setPrefWidth(100);
node.setPrefHeight(50);
node.setTranslateX(200);
node.setTranslateY(200);
node.setOnDragDetected(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
System.out.println("odDragDetected");
double x = event.getX();
double y = event.getY();
x -= node.getTranslateX();
y -= node.getTranslateY();
dragVector = new Point2D(x, y);
node.startFullDrag();
}
});
node.setOnDragOver(new EventHandler<DragEvent>() {
@Override
public void handle(DragEvent event) {
System.out.println("onDragOver");
double x = event.getX();
double y = event.getY();
x += dragVector.getX();
y += dragVector.getY();
node.setTranslateX(x);
node.setTranslateY(y);
}
});
node.setOnDragDone(new EventHandler<DragEvent>() {
@Override
public void handle(DragEvent event) {
dragVector = null;
}
});
root.getChildren().add(node);
Scene scene = new Scene(root, 800, 600);
primaryStage.setScene(scene);
primaryStage.setTitle("DragTry");
primaryStage.show();
}
public static void main(String[] args) {
DragTry.launch(args);
}
}
「startFullDrag」は必要ありません。 – Dims
@Dims完全ドラッグモードでは、ドラッグが開始されたノード以外のノードにマウスイベントが配信されます。 3つの異なるドラッグモードがあります。それぞれの操作方法については、['MouseEvent' documentation(http://docs.oracle.com/javase/8/javafx/api/javafx/scene/input/MouseEvent.html)を参照してください。 1つは働く;簡単に言えば、 'startFullDrag()'または 'startDragAndDrop()'はそれぞれ非デフォルトモードの1つを選択します。 –