tags:

views:

103

answers:

1

I am putting a component ( derivative on JPanel ) inside a JScrollPane.

scrollPane = new JScrollPane(component);

since the component occasionally changes size, I have to occasionally do :

 SwingUtilities.invokeLater(new Runnable(){

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

Also, the component can receive KeyEvents

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

However, the component never receives any Key Events. Even the code in keyTyped() does not execute ( I put a System.out.println() there). What is more baffling, is, in debug mode, I can pause the main thread, when the AWT event thread would accept key events. But during normal execution, it does not work.

Can anyone suggest what I am doing wrong ?

A: 

Making my component java.swing.Scrollable, and replacing scrollPane.getViewport().setView(component); with component.revalidate solved my prioblem.

Thanks ordnungswidrig!

Sid Datta