2010-12-11 88 views
2

根據鼠標位置,可以在JTable滾動中顯示行嗎?JTable按鼠標位置滾動

即,如果光標靠近表格的頂部,則它開始向上滾動,並且如果它靠近表格的底部,則它開始向下滾動。

在AS3這種效果類似:

http://activeden.net/item/professional-dock-menu-as2-and-as3/127450

我目前使用:

int row = table.rowAtPoint(e.getPoint()); 
Rectangle r = table.getCellRect(row,0,true); 
table.scrollRectToVisible(r); 

一個的mouseMoved偵聽器內,當光標到達頂部/底部滾動哪一次行。我不確定如何讓它在這之後繼續滾動(目前用戶必須不斷移動鼠標才能繼續進行)。

回答

1

我想你需要在鼠標進入表格時啓動一個Swing Timer。在mouseMoved事件中,您可以更改計時器間隔以使其更快或更慢,具體取決於鼠標相對於桌面/底部的位置。然後,當Timer觸發時,可以使用MouseInfo類(或保存最後一個mouseMoved點)來獲取鼠標位置,以確定是否向上/向下滾動一行。

+0

非常感謝這個答案。我想過計時器選項,但我沒有考慮在mouseEntered上啓動它,我沒有考慮簡單地保存最後一個mouseMoved點 - 兩者都非常有幫助。但是,我仍然不知道如何根據鼠標相對於桌面/底部的位置來計算適當的時間間隔。是否有一種簡單的方法可以知道屏幕上當前顯示的行數,以及這些行的範圍?例如第6至34行正在查看,鼠標位於第10行。再次感謝您的回答。 – tre 2010-12-12 22:41:51

+0

不理會我的最後一條評論,只是找到了一種方法(使用JViewport並在每次視口更改時觸發)。 – tre 2010-12-12 22:58:54