簡體   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