JTable cellule auditeur?
Je suis l'aide d'une JTable. J'ai besoin d'obtenir une notification à chaque fois qu'une cellule
changement de sélection. J'ai essayé d'utiliser le ListSelectionListener mais
Je seulement obtenir la notification lors de la sélection d'une ligne de changement. Si je sélectionne un
nouvelle colonne sur la même ligne, je ne reçois pas de notification. J'ai besoin de savoir quand
la cellule est sélectionnée, pas quand la cellule est modifiée. Est-il un auditeur que je peux utiliser pour ce faire ?
OriginalL'auteur tadpole | 2012-09-11
Vous devez vous connecter pour publier un commentaire.
La façon la plus simple pour ce faire est d'appeler
setCellSelectionEnabled(true)
, et de passer une référence à votre table à l'auditeur. Lorsque l'auditeur est appelé, appelgetSelectedRow()
etgetSelectedColumn()
sur la table d'origine.La solution consiste à définir une ligne de sélection de l'auditeur sur la table, une colonne de sélection de l'auditeur sur les
ColumnModel
, et de déterminer leur point d'intersection.@têtard -
JTable.getColumnModel().getSelectionModel()
Merci beaucoup, c'est exactement ce que je cherchais.
l'enregistrement d'un TableColumnModelListener et de mettre en œuvre ses columnSelectionChanged méthode est la voie la plus directe, mais d'aller plus loin et d'interagir directement avec la colonne de sélection de modèle est plus court 🙂 BTW, vous pourriez envisager de modifier votre réponse et de supprimer la première partie
J'ai trouvé que je devais ajouter le même auditeur pour le
ColumnModel
'sSelectionModel
et laJTables
'sSelectionModel
pour l'obtenir à reconnaître à la fois en ligne et en colonne les changements.OriginalL'auteur parsifal
Un moyen pour recevoir une notification sur colonne les changements de sélection - comme déjà répondu par @parsifal(dans les commentaires - est de saisir les TableColumnModel interne selectionModel et enregistrer un listener:
Une autre façon est d'enregistrer un TableColumnModelListener avec le columnModel:
La première est plus "courtes" en termes de code: juste une méthode pour mettre en œuvre comparativement à plusieurs - plus vide à l'exception de la columnSelectionChanged.
La seconde est plus robuste contre les changements dynamiques: avec le premier, il n'y a pas de possibilité pour se prémunir contre les variations de la selectionModel propriété de la columnModel ... parce que ce n'est pas une propriété. Ou en d'autres termes: dans le (concededly rares) cas, le code de l'application des swaps de la selectionModel l'auditeur est à l'écoute pour les Nuls. L'installation d'un columnModelListener est immunisé contre ce changement, le columnModel passe sur les événements à partir de sa selectionModel quoi qu'il en serait.
OriginalL'auteur kleopatra