JavaFX Canvas 未拾取关键事件

标签 java events canvas javafx key

我有以下代码显示具有 3 个连续 hello world 的 JavaFX Canvas

    StackPane root = new StackPane();

        Canvas canvas = new Canvas(250,250);
        canvas.setOnMouseEntered((a) -> System.out.println("hi"));
        canvas.setOnMousePressed((a) -> System.out.println("focus"));
        canvas.setOnKeyReleased(new EventHandler<KeyEvent>() {

            @Override
            public void handle(KeyEvent event) {
                System.out.println("Handled");
            }
        });
//        canvas.setOnKeyPressed((a) -> System.out.println("hi"));

        GraphicsContext context = canvas.getGraphicsContext2D();
        context.setFill(Color.BLUE);
        final int fontSize = 15, fontSpace = 5;
        context.setFont(Font.font(15));

        context.fillText("hello world", 75, 75);
        context.fillText("hello world", 75, 75 + fontSize + fontSpace);
        context.fillText("hello world", 75, 75 + (fontSize + fontSpace) * 2);

        root.getChildren().add(canvas);

        Scene scene = new Scene(root, 300, 250);

        primaryStage.setTitle("Hello World!");
        primaryStage.setScene(scene);
        primaryStage.show();

当我将鼠标悬停在它上面时,它会打印“hi”。当我单击它时,它会打印“焦点”。当我按键时,没有任何反应。有什么我想念的吗?

最佳答案

你需要

canvas.setFocusTraversable(true);

因为 Canvas 没有 focusTraversable默认设置。

关于JavaFX Canvas 未拾取关键事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24126845/

相关文章:

javascript - 在 Javascript 中实现快速排序

java - 声明存储在集合中的类型(文字)的变量

javascript - D3 - 将事件添加到酒吧

javascript - Canvas.toDataURL() 解决方法?

c# - 如何在 C# 类中公开事件?

javascript - 使用鼠标滚轮向下事件在网站上滚动了多少像素?

java - 图层是在 JavaFX Canvas 上合成图形的唯一方法吗?

java - 使用 Java 8 Streams 从列表中仅获取所需的对象

java - 如何在 JAX-RS 客户端获取直接异常堆栈跟踪

java - 创建从不与java重叠的图形对象