没有抓住JavaFX按键 [英] JavaFX key press not captured
问题描述
我正在尝试捕获按键新闻事件(上下翻页),但根本没有收到关键事件。以下是相关的代码:
构造函数:
I am trying to capture key press events (page up and down) but there are no key events received at all. Here is the relevant code: Constructor:
private MainLayout() {
imageView = new ImageView();
root = new StackPane();
root.getChildren().add(imageView);
root.setFocusTraversable(true); //no effect
//root.requestFocus(); //also no effect
registerEvents();
}
关于焦点的两行都没有影响。堆栈窗格直接添加到场景中。
没有其他节点,而不是Scene-> StackPane-> ImageView。
我能够捕获场景中的关键事件,但是我需要它们在堆栈窗格中捕获
Both lines regarding the focus don't have an effect. The stack pane is directly added to scene. There are no other nodes than Scene->StackPane->ImageView. I am able to capture key events on the scene, but i need them captured in the stack pane
这里是 registerEvents()
,所有其他事件都被捕获了!
Here is registerEvents()
, all other events are captured fine!:
private void registerEvents() {
OnScroll onScroll = new OnScroll();
root.setOnScroll(onScroll);
OnResize onResize = new OnResize();
root.heightProperty().addListener(onResize);
root.widthProperty().addListener(onResize);
OnMouseDown onMouseDown = new OnMouseDown();
root.setOnMousePressed(onMouseDown);
root.setOnMouseReleased((event) -> fitImage());
root.setOnDragOver((event) -> dragOver(event));
root.setOnDragDropped((event) -> dropFile(event));
root.setOnKeyPressed((event) -> {
LOG.debug("Key captured.");
if(event.getCode() == KeyCode.PAGE_UP){
imageView.setImage(ip.prev());
event.consume();
} else if(event.getCode() == KeyCode.PAGE_DOWN){
imageView.setImage(ip.next());
event.consume();
}
if(event.isConsumed()){
fitImage();
}
});
我没有看到注销,而且断点也没有被抓住。那么如何正确地捕获和处理关键事件?
I don't see the log out put and a break point is also not caught. So how to catch and handle key events correctly?
推荐答案
同时我发现解决方案感谢这个答案。诀窍在于ImageView(堆栈窗格的子)上的 setFocusTraversable(true)
。以下是工作代码:
Meanwhile i found the solution thanks to this answer. The trick is to setFocusTraversable(true)
on ImageView (child of stack pane). Here is the working code:
@Inject
private MainLayout(ImageProvider ip) {
this.ip = ip;
imageView = new ImageView();
imageView.setFocusTraversable(true);
imageView.requestFocus();
root = new StackPane();
root.getChildren().add(imageView);
registerEvents();
}
这篇关于没有抓住JavaFX按键的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!