Получение внимания на JPanel

У меня есть 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 а не на чем-то в нем.

18
задан Lukas Rotter 14 December 2015 в 15:52
поделиться

4 ответа

Несмотря на то, что вы указываете, что панель может быть сосредоточен, панель не просит фокусировку. Попробуйте использовать mypanel.requestfocus (); .

22
ответ дан 30 November 2019 в 07:49
поделиться

Я иногда сталкиваюсь с аналогичной проблемой. Я заметил, что в некоторых случаях лучше сделать или запросить фокус на определенном управлении внутри панели, который находится в рамке (например, поле ввода, к которому вы хотите ввести ввод клавиатуры), а не фокус сама на панели.

1
ответ дан 30 November 2019 в 07:49
поделиться

Используйте setFocusable(true), а затем requestFocusInWindow(). Но последнее должно быть сделано после того, как окно, содержащее панель, станет видимым, для чего вам, скорее всего, понадобится зарегистрировать прослушиватель окна и выполнить requestFocusInWindow() в коде обработчика, активированного в окне.

Замечание: Специально после того, как окно становится видимым, а не только после вызова setVisible(true).

6
ответ дан 30 November 2019 в 07:49
поделиться

Попробуйте

panel.setFocusable(true);
panel.setRequestFocusEnabled(true);

// some code here

panel.grabFocus();
2
ответ дан 30 November 2019 в 07:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: