查看JDK的API文檔,我們知道JTable有兩個函數,一個是setColumnSelectionInterval(int beginIndex, int endIndex),可以選定指定的列;一個是setRowSelectionInterval(int beginIndex, int endIndex),可以選定指定的行。當JTable包含的列或者行比較多的時候, 調用這兩個函數雖然沒有問題,但可能會出現這樣一種情況:指定的行或列已經被選中了,而該行或列正好不在可見地區內,需要拖動捲軸才可以看到選中的行或列。這樣就給使用者一個不太好的體驗了。
最直接的想法自然是看看JTable是否提供了API可供調用。對於JTree,是有這樣的函數的:scrollPathToVisible(TreePath path)和scrollRowToVisible(int row)。調用其中一個函數就可以達到目標。而JTable則沒有提供這樣的函數。JComponent提供了函數scrollRectToVisible(Rectangle rect)。通過這一函數,還是可以實現JTable的滾動的。函數scrollRectToVisible將調用轉寄給它的父容器進行處理,父容器選擇繼續往上轉寄或者處理該請求。
函數scrollRectToVisible只接收一個參數Rectangle,表明希望哪個地區是可見的。對於JTable,通過以下方式得到需要的參數:
int x = jTable1.getBounds().x;
int y = jTable1.getRowHeight() * rowIndex;
int width = jTable1.getBounds().width;
int height = jTable1.getRowHeight();
jTable1.scrollRectToVisible(new Rectangle(x, y, width, height));
對於JList,可以這樣實現:
jList1.scrollRectToVisible(jList1.getCellBounds(rowIndex, rowIndex));