[英]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.