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