Java JScrollPane中的组件停止接收KeyEvents

Java JScrollPane中的组件停止接收KeyEvents,java,swing,Java,Swing,我把JPanel上的一个组件导数放在一个JScrollPane中 scrollPane = new JScrollPane(component); 由于组件偶尔会改变大小,因此我必须偶尔执行以下操作: SwingUtilities.invokeLater(new Runnable(){ public void run() { scrollPane.getViewport().setView(component);

我把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事件线程将接受键事件。但在正常执行期间,它不起作用


有人能指出我做错了什么吗?

使我的组件java.swing.Scrollable,并替换scrollPane.getViewport.setViewcomponent; 使用component.revalidate解决了我的问题


谢谢你

您能详细说明一下为什么必须再次设置视图吗?组件不能正确处理大小更改吗?您是否考虑过实现java.swing.Scrollable?请告诉我该组件如何正确处理大小更改?喜欢步骤是什么?替换scrollPane.getViewport.setViewcomponent;使用component.revalidate和Scrollable解决了我的问题。谢谢