JScrollPane自动向下滚动到JPanel中的最低组件

时间:2016-04-28 13:37:10

标签: java swing jscrollpane

在我的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));
        }
    });

1 个答案:

答案 0 :(得分:2)

JScrollPane.getViewPort().scrollRectToVisible(new Rectangle(0,0,1,1));

scrollRectToVisible()方法用于添加到视口的组件(包含文本区域的面板),而不是视口本身。不确定直接在视口上调用时会发生什么。

相反,我会做以下事情:

scrollPane.getViewPort().setViewPosition( new Point(0, 0) );

注意,您可能需要将该语句包装在SwingUtilities.invokeLater()中,以确保在布局管理器将所有组件放置在面板上后,在EDT上执行代码。