JavaFX Canvas无法接收关键事件 [英] JavaFX Canvas not picking up key events
本文介绍了JavaFX Canvas无法接收关键事件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有以下代码显示了具有3个连续的hello世界的JavaFX Canvas
I have the following code showing a JavaFX Canvas with 3 consecutive hello worlds
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".当我单击它时,它会打印焦点".当我按下键时,什么也没发生.有什么我想念的吗?
When I mouse over it, it prints "hi". When I click it, it prints "focus". When i press keys, nothing happens. Is there something I'm missing?
推荐答案
您需要
canvas.setFocusTraversable(true);
因为画布没有 focusTraversable
默认设置.
as canvases do not have focusTraversable
set by default.
这篇关于JavaFX Canvas无法接收关键事件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文