讓 JScrollbar 滾動條自動滾動到底端

2021-08-27 12:58:43 字數 1213 閱讀 2082

由於專案需要,自定義了乙個面板,jscrollpane下填充乙個jtable**,**的單元格採用自定義的渲染器 tabletextareacellrenderer(用jtextarea代替jlabel,後者其實就是預設的 defaultcellrenderer)。按照要求,面板填完內容之後,滾動條自動滾動到最低端。貌似是個簡單的問題,考慮過的實現方式如下:

jscrollbar scrollbar = this.jscrollpane1.getverticalscrollbar();

scrollbar.setvalue(scrollbar.getmaxmium());

實際效果很不理想,特別是當單元格內容行數很多時。所以又用了變通的第二種方法,讓最後一行的單元格去獲取焦點,自然也就實現了滾動條到下面

if (notetable.getrowcount() != 0)

測試時和第一種方法的結果類似,所以也放棄了,接著有了第三種方法:

jscrollbar scrollbar = this.jscrollpane1.getverticalscrollbar();

scrollbar.setvalue(scrollbar.getmodel().getmaximum() - scrollbar.getmodel().getextent());

直接用還是會有問題,jscrollpane構建後會自動調整介面,填充內容之後立即呼叫上面的**會發現 scrollbar.getmodel().getmaximum() 和 scrollbar.getmodel().getextent()仍然為零或者不穩定, 也就意味著自動調整尚未結束,結果就不會是value被設定到最大值或者說滾動條置底。解決的辦法就是新增偵聽事件,當監聽到自動調整完畢,呼叫以上方法。但此時又遇到另乙個問題,自動調整結束的標誌是什麼,該監聽哪種事件判斷哪個屬性的改變,我的方法是:

jscrollpane1.getverticalscrollbar().addadjustmentlistener(new adjustmentlistener()

}});

紅色部分意味著正在進行自動調整,藍色部分的意思是進行三次調整(原因是自動調整並不是進行一次,採用除錯-區域性變數檢視可以知道,多數情況兩次,最多三次),isneedbottom 是定義的全域性整型變數,需要滾動條自動滾動到底端時將其設定為0即可。經過測試,按這種方法最終達到了要求。

回過頭來想想,監聽狀態是變通的方法,自己並沒有找到自動調整反映在哪個屬性上,如果可以監聽該屬性的改變,方法更明確也更簡單。

讓DIV顯示滾動條

今天在公司接到一項任務,主要是做乙個導航選單,選單分橫縱結構,橫向主要顯示 中所分大類,縱向主要顯示大類中的小類,而縱向選單是用treeview來實現的,當treeview中有很多的項時,可能會使頁面走形,而公司要求是頁面大小要固定的情況下實現這些功能。這種結構在很多情況下都是通過框架來實現的,我想...

讓TextView 自帶滾動條

textview中有個ellipsize屬性,作用是當文字過長時,該控制項該如何顯示,解釋如下 1.android ellipsize start 省略號顯示在開頭 2.android ellipsize end 省略號顯示在結尾 3.android ellipsize middle 省略號顯示在中...

python橫向滾動條 控制滾動條

調過js指令碼控制 python 1.coding utf 8 2.from selenium import webdriver 3.import time 5.driver webdriver.firefox 6.driver.get 7.搜尋 8.driver.find element by i...