2010-12-11 7 views
2

Est-il possible d'avoir les lignes dans un défilement JTable en fonction de la position de la souris? Par exemple, si le curseur s'approche du haut de la table, il commence à défiler vers le haut et s'il se rapproche du bas de la table, il commence à défiler vers le bas.JTable Défilement par position de la souris

similaires à cet effet dans AS3:

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

J'utilise actuellement:

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

au sein d'un auditeur mouseMoved, qui défile une fois lorsque le curseur arrive au haut/bas rangée. Je ne sais pas comment l'obtenir pour continuer à défiler après cela (actuellement, l'utilisateur devrait constamment déplacer la souris pour le faire continuer).

Répondre

1

Je suppose que vous devez démarrer une minuterie d'oscillation lorsque la souris entre dans la table. Dans un événement mouseMoved, vous pouvez modifier l'intervalle Timer pour le rendre plus rapide ou plus lent en fonction de l'emplacement de la souris par rapport au haut ou au bas de la table. Ensuite, lorsque le temporisateur se déclenche, vous pouvez utiliser la classe MouseInfo (ou enregistrer le dernier point mouseMoved) pour obtenir l'emplacement de la souris afin de déterminer si vous souhaitez faire défiler une ligne vers le haut ou vers le bas.

+0

Merci beaucoup pour cette réponse. J'ai pensé à l'option de minuterie mais je n'ai pas pensé à la démarrer sur mouseEntered, et je n'ai pas pensé à simplement enregistrer le dernier point mouseMoved - les deux très utile. Cependant, je ne sais toujours pas comment calculer l'intervalle approprié en fonction de l'emplacement de la souris par rapport au haut ou au bas de la table. Existe-t-il un moyen simple de savoir combien de lignes sont actuellement affichées à l'écran et quelle est la portée de ces lignes? par exemple. les lignes 6 à 34 sont actuellement en vue, et la souris est sur la ligne 10. Merci encore une fois pour votre réponse. – tre

+0

Ne tenez pas compte de mon dernier commentaire, juste trouvé un moyen de le faire (en utilisant JViewport et en tirant à chaque fois que la fenêtre change). – tre

Questions connexes