2010-09-26 3 views
3

J'ai connecté un écouteur de souris à un JTable pour appeler des éléments lorsque le curseur de la souris quitte les limites de la table. Cependant, la méthode mouseExited() est également appelée lorsque le curseur de la souris quitte des cellules individuelles d'une table. Est-ce un étrange bizarrement dans mon code ou un bug dans Swing?Comportement bizarre d'un MouseListener ajouté à un JTable

EDIT: Je ne l'ai pas mentionné que ma table est une sous-classe d'une JTable et non une norme JTable

+3

fonctionne très bien pour moi avec un JTable standard. Ça pourrait être quelque chose avec ta classe. S'il vous plaît poster du code. – lins314159

+0

Fonctionne pour moi aussi ... s'il vous plaît poster du code – Favonius

Répondre

0

Ajout d'auditeurs de souris à PL & composants F-lourds est pas une bonne idée. Ils ont souvent des sous-composants qui gâchent la fête. Les événements de la souris sont différents des autres événements en ce qu'ils font exploser la hiérarchie des composants jusqu'à ce qu'ils atteignent un composant avec un écouteur de souris (l'ajout d'un écouteur de souris est donc une opération intrusive). JTable utilise en particulier renderer pour tamponner chaque cellule ainsi que les composants de l'éditeur.

(sous-classe compnents également tels que JTable, ou d'autres classes telles que Thread, est généralement une mauvaise idée.)

+0

Les événements de la souris peuvent continuer à se propager si un écouteur souris ne le consomme pas. Et des raisons spécifiques pour lesquelles vous ne recommandez pas d'étendre 'JTable'? Je peux comprendre pourquoi pas Thread, mais JTable a beaucoup de choses à exclure (par exemple, search, hierarchy). Vous pouvez ajouter de nombreuses fonctionnalités en étendant le modèle de table, le modèle de colonne, l'en-tête, etc., mais j'ai rencontré des cas où je dois étendre JTable lui-même. –

+0

Un écouteur n'a pas besoin d'appeler 'consommer()' pour empêcher l'événement de bouillonner. Juste la présence d'un auditeur fera l'affaire. –

1

Sons normal pour moi si vous n'êtes pas vérifier pour event.getSource() == myTable