Возьмите фокус на JPanel в JLayeredPane - PullRequest
2 голосов
/ 25 июля 2011

у меня есть JLayeredPane с 2 слоями

первый слой - JPanel Упаковка Image. второй слой - это другой объект, который расширяет JPanel и называется ResizableRectangle и реализует KeyListener.

Я переопределил метод KeyPressed, но он не получает событие keyPressed и метод не вызывается.

Я установил setFocusEnable(true) и использовал grabFocus(), requestFocus() и requestFocusInWindows(), но все они возвращают false.

Я понял, когда я нажимаю tab после загрузки JFrame, Focus переходит на нужную панель, и слушатель получает события.

Я добавил KeyListener к JLayeredPane, и он работает нормально, но проблема в том, что я хочу добавить слушателя к панели, а не к слоистой панели.

1 Ответ

2 голосов
/ 25 июля 2011

Я надеюсь, что вы поместите Image или ImageIcon в JLabel , затем добавите в JLabel MouseListener

, а затем просто позвоните

EventQueue.invokeLater(new Runnable() {

     @Override
     public void run() {
        myPanel.grabFocus();
        myPanel.requestFocus();//or requestFocusInWindows();          
     }
});
...