JavaFX画布未拾取关键事件
下面的代码显示了一个JavaFX画布,其中包含3个连续的hello世界JavaFX画布未拾取关键事件,java,events,canvas,javafx,key,Java,Events,Canvas,Javafx,Key,下面的代码显示了一个JavaFX画布,其中包含3个连续的hello世界 StackPane root = new StackPane(); Canvas canvas = new Canvas(250,250); canvas.setOnMouseEntered((a) -> System.out.println("hi")); canvas.setOnMousePressed((a) -> System.out.printl
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();
StackPane root=new StackPane();
画布=新画布(250250);
canvas.setonmouseintered((a)->System.out.println(“hi”);
canvas.setOnMousePressed((a)->System.out.println(“焦点”);
canvas.setOnKeyReleased(新的EventHandler(){
@凌驾
公共无效句柄(KeyEvent事件){
系统输出打印项次(“已处理”);
}
});
//canvas.setOnKeyPressed((a)->System.out.println(“hi”);
GraphicsContext上下文=canvas.getGraphicsContext2D();
context.setFill(Color.BLUE);
最终int fontSize=15,fontSpace=5;
context.setFont(Font.Font(15));
上下文.fillText(“hello world”,75,75);
填充文本(“hello world”,75,75+fontSize+fontSpace);
context.fillText(“hello world”,75,75+(fontSize+fontSpace)*2);
root.getChildren().add(画布);
场景=新场景(根,300,250);
setTitle(“你好,世界!”);
初级阶段。场景(场景);
primaryStage.show();
当我将鼠标移到它上面时,它会打印“嗨”。当我点击它时,它会打印“焦点”。当我按键时,什么也没发生。我有什么遗漏吗?你需要
canvas.setFocusTraversable(true);
默认情况下,没有设置为画布。添加以下行:
canvas.addEventFilter(MouseEvent.ANY, (e) -> canvas.requestFocus());
单击画布后,画布将请求焦点和识别键事件。我不确定是否会在任何鼠标事件上执行此操作,因为移动器悬停会使其获得焦点,如果您在附近有一个文本字段,并且您希望悬停在画布上的某个元素上以获得进入该字段的信息,则焦点会被获取,这可能会导致混淆迷路的我可能会过滤到鼠标按下之类的东西,这样用户只有在特别请求时才可以通过单击来取消控制。然而,对于修复的基本思想,答案是好的。。。这是关键。