没有抓住JavaFX按键 [英] JavaFX key press not captured

查看:177
本文介绍了没有抓住JavaFX按键的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试捕获按键新闻事件(上下翻页),但根本没有收到关键事件。以下是相关的代码:
构造函数:

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆