【问题标题】:JFrame getRootPane() Returns NullJFrame getRootPane() 返回 Null
【发布时间】:2013-11-30 18:18:33
【问题描述】:

在我的主类中,我最初是从创建 java 框架开始的。后来,我从另一个名为“keybinding”的类创建了一个新对象,并将其传递给 JFrame。然后它将某些键的操作映射应用到 JFrame 的 根窗格

我之前在教育 IDE BlueJ 中编写此应用程序,该代码运行良好。但我正在将其移至常规 IDE,在本例中为 JDeveloper。除了 this 键绑定之外,所有代码都可以工作。

使用下面的代码,使用 JDev,调用 getRootPane() 返回 null。

Stage.java

jf = new JFrame("The Title");
jf.setSize(800,600);
//etc
Keybinding keys = new Keybinding(this);

Keybinding.java

KeyStroke pressLeft = KeyStroke.getKeyStroke("LEFT");
stage.jf.getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW)
                          .put(pressLeft, "pressLeft");

【问题讨论】:

    标签: java swing jframe key-bindings keystroke


    【解决方案1】:

    KeyBinding 类的参数应该只是

    new KeyBinding(jf);
    

    那么KeyBinding类中的代码就可以访问frame了,如下:

    public KeyBinding(JFrame frame)
    {
        JRootPane rootPane = frame.getRootPane();
        rootPane.getInputMap(...)
    }
    

    【讨论】:

    • 向它传递一个指针并让它使用它来引用 JFrame 确实很愚蠢,因为我可以先将 JFrame 传递给它,谢谢。我不明白为什么这条路线仍然不应该工作?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-28
    • 1970-01-01
    • 1970-01-01
    • 2014-03-02
    相关资源
    最近更新 更多