gpt4 book ai didi

java - 数据刷新后滚动条移动

转载 作者:行者123 更新时间:2023-11-30 07:09:52 27 4
gpt4 key购买 nike

我有一个 JScrollPane,上面有 JPanel。我在 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()中)时,滚动条移动到末尾。当我设置大小时,滚动条移动到奇怪的固定位置。

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

最佳答案

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

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

关于java - 数据刷新后滚动条移动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39407352/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com