Я помещаю компонент (производный от 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 будет принимать ключевые события. Но во время обычного выполнения это не работает.
Может кто-нибудь подсказать, что я делаю не так?