我在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事件线程接受键事件时,我可以暂停主线程。但在正常执行期间,它不起作用。
任何人都可以建议我做错了吗?
答案 0 :(得分:0)
使我的组件java.swing.Scrollable,并替换scrollPane.getViewport().setView(component);
与component.revalidate
解决了我的问题。
感谢ordnungswidrigkeit!