JScrollPane中的组件停止接收KeyEvents

时间:2009-03-13 00:29:56

标签: java swing

我在JScrollPane中放置了一个组件(衍生自JPanel)。

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 :(得分:0)

使我的组件java.swing.Scrollable,并替换scrollPane.getViewport().setView(component);component.revalidate解决了我的问题。

感谢ordnungswidrigkeit!