JFrame getRootPane() возвращает значение null

В моем основном классе я сначала начинаю с создания фрейма Java. Позже я создаю новый объект из другого класса под названием «привязка клавиш» и передаю ему 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");

person RADXack    schedule 30.11.2013    source источник


Ответы (1)


Параметр класса KeyBinding должен быть просто

new KeyBinding(jf);

Затем код в классе KeyBinding может получить доступ к фрейму следующим образом:

public KeyBinding(JFrame frame)
{
    JRootPane rootPane = frame.getRootPane();
    rootPane.getInputMap(...)
}
person camickr    schedule 30.11.2013
comment
Передавать ему указатель и использовать его для ссылки на JFrame действительно глупо, когда я мог бы просто передать ему JFrame для начала, спасибо. Однако я не понимаю, почему этот маршрут все еще не должен работать? - person RADXack; 30.11.2013