У меня есть a JPanel
внутри a JFrame
. Я зарегистрировал a KeyListener
, на основе которого я хочу обновить JPanel
. Проблема, которую я имею, состоит в том, что я не могу надеть фокус JPanel
и поэтому мой KeyListener
не будет работать. Я уже знаю что KeyListener
функционально, потому что я зарегистрировал его в JFrame
и это хорошо работало. Мой код проходит примерно так в данный момент:
myFrame.setFocusable(false);
myPanel.setFocusable(true);
myPanel.addKeyListener(myKL);
myFrame.add(myPanel);
Кто-либо встретился с проблемой как это прежде? Есть ли что-то, что я пропускаю в отношении этого?
P.S.: у Меня нет компонентов в JPanel
Я просто рисую Изображение на фоне, таким образом, мне нужен фокус, чтобы быть на самом JPanel а не на чем-то в нем.
Несмотря на то, что вы указываете, что панель может быть сосредоточен, панель не просит фокусировку. Попробуйте использовать mypanel.requestfocus ();
.
Я иногда сталкиваюсь с аналогичной проблемой. Я заметил, что в некоторых случаях лучше сделать или запросить фокус на определенном управлении внутри панели, который находится в рамке (например, поле ввода, к которому вы хотите ввести ввод клавиатуры), а не фокус сама на панели.
Используйте setFocusable(true)
, а затем requestFocusInWindow()
. Но последнее должно быть сделано после того, как окно, содержащее панель, станет видимым, для чего вам, скорее всего, понадобится зарегистрировать прослушиватель окна и выполнить requestFocusInWindow()
в коде обработчика, активированного в окне.
Замечание: Специально после того, как окно становится видимым, а не только после вызова setVisible(true)
.
Попробуйте
panel.setFocusable(true);
panel.setRequestFocusEnabled(true);
// some code here
panel.grabFocus();