2011-11-12 32 views
2

我有一個帶JTreeTable的JScrollPane。通常,我的JTable包含很多項目,應用程序必須將焦點設置爲特定行,然後滾動到該行。 我使用以下推薦的代碼將焦點設置:JTable不向上滾動

table.scrollRectToVisible(table.getCellRect(rowIndex, vColIndex, true)); 

出於某種原因,只有在新選定的行是當前可見的行下面的作品。但是當程序要求選擇位於當前可見行上方的不可見行時,它根本不會滾動到該位置。 我已經搜索了很多關於這個問題,但還沒有找到任何解決方案。有人有一個想法如何解決這個問題? 預先感謝您。

+0

請儘量讓你的技術詞彙中途修正:焦點(又名:表格上下文中的首選項索引)與行的可見性無關。滾動應該在兩個方向上工作。因此,您沒有顯示的代碼存在問題,因爲@camickr已經建議使用sscce的時間 – kleopatra

+0

這裏也一樣。最初我使用'table.changeSelection',然後我改爲'table.scrollRectToVisible'。在這兩種情況下,我都會得到所描述的行爲:滾動但不起來。 – Gustavo

回答

3

scrollRectToVisible()方法只確保矩形在視口中可見。我相信你可以使Rectangle和視口一樣大小,即使起始點可見時也可以強制滾動。

一種更簡單的方法是使用:

scrollPane.getViewport().setViewPosition(...); 
+0

它工作嗎?你能給我一個示例代碼如何使用你的方法設置一個關於number = i的行嗎? – palcan

+0

您應該能夠用上面建議的一行代碼替換您的scrollRectToVisible()代碼。如果您遇到問題,請發佈證明問題的[SSCCE](http://www.sscce.org)。 – camickr

+0

不會建議 - 它不是一個單行無論如何,因爲你需要計算viewPosition ;-) – kleopatra

2

爲了處理向上滾動狀態下的變通爲我工作:

table.scrollRectToVisible(table.getCellRect(0, 0, true)); 
table.scrollRectToVisible(table.getCellRect(rowIndex, vColIndex, true)); 
+0

醜。但爲我工作。 – Gustavo