在我的主班里,我首先从创建Java框架开始。稍后,我从另一个名为“ keybinding”的类创建一个新对象,并将其传递给JFrame。然后,它将某些键的操作映射应用于JFrame的根窗格。

我以前是在教育性IDE BlueJ中编写此应用程序的,该代码可以正常工作。但是我正在将其迁移到常规IDE(在本例中为JDeveloper)中。除此键绑定外,所有代码均有效。

使用下面的代码,使用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");

最佳答案

KeyBinding类的参数应为

new KeyBinding(jf);


然后,KeyBinding类中的代码可以按如下方式访问框架:

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

10-04 14:07