После добавления setFocusable (true) и requestFocusInWindow () мой KeyListener внутри объекта JComponent по-прежнему не работает.
Нельзя запрашивать фокус на компоненте, пока компонент не имеетбыл добавлен в кадр был упакован или сделан видимым. Так что запрос фокуса в конструкторе ничего не делает.
Базовая логика должна быть такой:
CustomComponent component = new CustomComponent(...);
frame.add( component );
frame.pack();
frame.setVisible( true );
component.requestFocusInWindow();
Примечание. Я вызвал компонент CustomCompnent, поскольку уже существует класс AWT с именем "Canvas", что может сбивать с толку. Используйте более описательное имя при создании классов.
Другой вариант - переопределить метод addNotify()
вашего класса, чтобы вызвать метод requestFocusInWindow()
.
@Override
public void addNotify()
{
super.addNotify();
requestFocusInWindow();
}