在我的JPanel(在JScrollPane中)我有几个JTextArea。启动程序时,这些区域由JTextArea.setText填充(“text”);
问题是JScrollPane向下滚动到具有最低Y位置的JTextArea,就像用户将焦点放在JTextArea上一样,无论它何时填充了文本。我认为如果JScrollPane可能想要滚动到正在使用的“当前”JTextArea,我可以先在底部填充JTextArea来解决这个问题。它没有用,所以我假设它只是记住了最低点,然后因某种原因停留在那里。
像这样设置视图没有任何区别。
JScrollPane.getViewPort().scrollRectToVisible(new Rectangle(0,0,1,1));
我已经通过忽略填充最后的JTextAreas进行测试,然后JScrollPane正在查看JPanel的顶部,正如我想要的那样。 发生了什么,为什么它忽略了我的代码?
更新,回答选中 当GUI准备就绪时,您必须稍后设置视口
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
scrollPane.getViewport().setViewPosition(new Point(0, 0));
}
});
答案 0 :(得分:2)
JScrollPane.getViewPort().scrollRectToVisible(new Rectangle(0,0,1,1));
scrollRectToVisible()方法用于添加到视口的组件(包含文本区域的面板),而不是视口本身。不确定直接在视口上调用时会发生什么。
相反,我会做以下事情:
scrollPane.getViewPort().setViewPosition( new Point(0, 0) );
注意,您可能需要将该语句包装在SwingUtilities.invokeLater()中,以确保在布局管理器将所有组件放置在面板上后,在EDT上执行代码。