【发布时间】:2018-06-27 00:51:27
【问题描述】:
此 JavaFX 应用程序在窗口中间包含一个 Canvas 对象(黑色 bkg),我正在尝试检测该画布上的鼠标输入。我在控制台操作中添加了一个简单的打印来响应每个鼠标事件,只是为了测试。以下工作:
cnv.setOnMouseClicked();
但以下方法不起作用:
cnv.setOnMouseDragOver();
cnv.setOnMouseDragEntered();
cnv.setOnMouseDragReleased();
cnv.setOnMouseDragExited();
不管我如何点击并拖动鼠标,只检测到鼠标点击(“mouseClicked”出现在控制台上)。
package javafxtest1;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
import javafx.scene.canvas.Canvas;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.input.MouseDragEvent;
import javafx.scene.input.MouseEvent;
import javafx.scene.paint.Color;
public class JavaFXTest1 extends Application {
@Override
public void start(Stage primaryStage) {
StackPane root = new StackPane();
Scene scene = new Scene(root, 800, 640);
Canvas cnv = new Canvas(scene.getWidth()-200,scene.getHeight()-200);
root.getChildren().add(cnv);
//Fill the canvas with a black bkg so we can know where it is
GraphicsContext gc = cnv.getGraphicsContext2D();
gc.setFill(Color.BLACK);
gc.fillRect(0, 0, cnv.getWidth(), cnv.getHeight());
//set response to mouse events
cnv.setOnMouseClicked((MouseEvent event) -> {
System.out.println("mouseClicked");
});
cnv.setOnMouseDragOver((MouseDragEvent event) -> {
System.out.println("mouseDragOver");
});
cnv.setOnMouseDragEntered((MouseDragEvent event) -> {
System.out.println("mouseDragEntered");
});
cnv.setOnMouseDragReleased((MouseDragEvent event) -> {
System.out.println("mouseDragReleased");
});
cnv.setOnMouseDragExited((MouseDragEvent event) -> {
System.out.println("mouseDragExited");
});
primaryStage.setTitle("Hello World!");
primaryStage.setScene(scene);
primaryStage.show();
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
launch(args);
}
}
我的错误在哪里?
(我在 Win 7 64 上使用 NetBeans 8.2)
【问题讨论】: