繁体   English   中英

垂直滚动条 setValue 始终将其设置为 90

[英]Vertical scrollbar setValue always sets it to 90

我正在保存两个滚动条的状态并使用以下两种方法加载它:

private void saveScrollPosition() {
    scrollY = scrollPane.getVerticalScrollBar().getValue();
    scrollX = scrollPane.getHorizontalScrollBar().getValue();
    System.out.println("Saved: " + scrollX + "," + scrollY);
}

private void loadScrollPosition() {
    scrollPane.getVerticalScrollBar().setValue(scrollY);
    scrollPane.getHorizontalScrollBar().setValue(scrollX);
    System.out.println("Should load: " + scrollX + "," + scrollY);
    System.out.println("Loaded: " + scrollPane.getHorizontalScrollBar().getValue() + "," + scrollPane.getVerticalScrollBar().getValue());
}

水平滚动条正在做它应该做的事情,但垂直总是设置为 90。

安慰:
已保存:185,882
应加载:185,882
已加载:185,90

在论坛中找到了一个技巧来创建一个新的 Runnable 方法并开始它

SwingUtilities.invokeLater(doScroll);

但它没有成功。

我想知道我做错了什么......

我必须先更新我的 contentPane。 然后垂直滚动条更新为正确的值。 Idk 为什么它与水平滚动条一起使用......

前:

loadScrollPosition();  
contentPane.updateUI();

contentPane.updateUI();
loadScrollPosition();

希望这可以帮助

我只是有同样的问题。 如果有人仍然有这个问题,这是我的情况:

我的JScrollPane每次都会新建,此时VerticalScrollBar的最大值设置为 100,因此它不能接受更高的值。

我通过在构造新的JScrollPane之前保存最大值来修复它,然后将其设置为新的对象。

if (scrollPane != null) {
    scrollPos = scrollPane.getVerticalScrollBar().getValue();
    maxScrollPos = scrollPane.getVerticalScrollBar().getMaximum();
}
scrollPane = new JScrollPane(panel);
if (scrollPos != null && maxScrollPos != null) {
    scrollPane.getVerticalScrollBar().setMaximum(maxScrollPos);
    scrollPane.getVerticalScrollBar().setValue(scrollPos);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM