Компонент в JScrollPane перестает получать KeyEvents - PullRequest
0 голосов
/ 13 марта 2009

Я помещаю компонент (производный от JPanel) в JScrollPane.

scrollPane = new JScrollPane(component);

так как компонент иногда меняет размер, мне иногда нужно сделать:

    SwingUtilities.invokeLater(new Runnable(){

          public void run()
          {
            scrollPane.getViewport().setView(component);
            component.repaint();
          }
    });

Также компонент может получать KeyEvents

    component.addKeyListener(this);
    SwingUtilities.invokeLater(new Runnable()
    {
        public void run()
        {
            component.setFocusable(true);
            component.requestFocusInWindow();       
        }
    });

Однако компонент никогда не получает никаких ключевых событий. Даже код в keyTyped() не выполняется (я поставил System.out.println() там). Что еще более озадачивает, так это то, что в режиме отладки я могу приостановить основной поток, когда поток событий AWT будет принимать ключевые события. Но во время обычного выполнения это не работает.

Может кто-нибудь подсказать, что я делаю не так?

1 Ответ

0 голосов
/ 13 марта 2009

Создание моего компонента java.swing.Scrollable и замена scrollPane.getViewport().setView(component); с component.revalidate решил мою проблему.

Спасибо ordnungswidrig!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...