Dim*_*ims 0 java drag-and-drop javafx
为什么onDragOver在下面的例子中没有发生事件?
如何实现最简单的拖动行为,即没有剪贴板的东西?
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);
}
}
Run Code Online (Sandbox Code Playgroud)
首先,您需要调用startDragAndDrop, 而不是startFullDrag。的文档MouseEvent中描述了不同的拖动模式。此外,拖放 API 的一个令人讨厌的部分是,除非您向拖动板添加某些内容,否则不会激活拖动:
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);
Dragboard db = node.startDragAndDrop(TransferMode.COPY_OR_MOVE);
ClipboardContent cc = new ClipboardContent();
cc.putString("Something");
db.setContent(cc);
}
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1524 次 |
| 最近记录: |