【问题标题】:The scroll bar moves after data refreshing数据刷新后滚动条移动
【发布时间】:2017-01-17 08:31:43
【问题描述】:

我有一个带有 JPanel 的 JScrollPane。我在 JPanel 上也有许多不同的组件(例如 Labels、JTextFields、JTextAreas)。这些组件以编程方式添加(在运行时,根据用户请求)。 JPanel 使用 SpringLayout。该程序在添加组件后计算 JPanel 的首选大小,因为如果不计算滚动就无法正常工作。添加组件和计算首选大小是我的 prepareGui() 方法的一部分。 组件上显示的数据会定期刷新(在我的 refreshData() 方法中,由侦听器调用)。

我的问题:刷新后,滚动条总是固定在固定位置(不知道为什么)。我希望滚动条在刷新后保持在旧位置。

我试图找到一个滚动条移动的地方。我在 refreshData() 方法的开始和结束时检查了一些值,但它们是相同的(它们在 refreshData() 内部没有改变):

scrollPane.getVisibleRect().getX()
scrollPane.getVisibleRect().getY()
scrollPane.getVisibleRect().getWidth()
scrollPane.getVisibleRect().getHeight()
panel.getVisibleRect().getX()
panel.getVisibleRect().getY()
panel.getVisibleRect().getWidth()
panel.getVisibleRect().getHeight()
scrollPane.getHorizontalScrollBar().getX()
scrollPane.getHorizontalScrollBar().getY()
scrollPane.getHorizontalScrollBar().getWidth()
scrollPane.getHorizontalScrollBar().getHeight()
scrollPane.getHorizontalScrollBar().getValue()
scrollPane.getVerticalScrollBar().getX()
scrollPane.getVerticalScrollBar().getY()
scrollPane.getVerticalScrollBar().getWidth()
scrollPane.getVerticalScrollBar().getHeight()
scrollPane.getVerticalScrollBar().getValue()

布局管理器的更改没有生效。

我注意到一件事(我不知道它是否有任何意义)。当我只设置首选大小时(在 prepareGui() 中),滚动条移动到最后。当我还设置大小时,滚动条会移动到奇怪的固定位置。

如何防止这种情况发生? 滚动条应保持其当前位置。

【问题讨论】:

    标签: java swing jpanel jscrollpane jscrollbar


    【解决方案1】:

    我终于在这里找到了答案:https://stackoverflow.com/a/5230477/5694159(感谢 Johan M)在关于 JTextArea 而不是 JPanel 的主题中。 当 refreshData() 在单独的线程中调用时,它工作得很好。

    我希望这个问题和答案对某人有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-14
      • 2011-06-22
      • 1970-01-01
      • 2010-11-14
      • 2012-09-27
      • 1970-01-01
      相关资源
      最近更新 更多