Faire un JTable cellule modifiable - mais *pas* en double-cliquant
Je suis en train d'ajouter une colonne à une JTable
avec le comportement suivant (similaire à l'Explorateur Windows et similaires coquilles):
- La cellule peut être cliqué une fois pour le sélectionner, comme d'habitude.
- La cellule peut y avoir double-cliqué sur l'icône pour effectuer une autre action (lancer un programme externe.)
- La valeur de la cellule (une chaîne) peut encore être modifié, par un simple clic sur un second temps (après une pause) ou en appuyant sur F2 lorsque la cellule est mise en surbrillance.
Double-cliquant doivent pas déclencher l'édition de la cellule, mais je voudrais laisser à tout autre défaut de l'édition déclenche opérationnelles si possible.
J'ai essayé d'ajouter un MouseListener
à la table, et la consommation de tous les MouseEvent
s, mais cela ne fonctionne pas - si-je retourner true
de isCellEditable()
puis mon auditeur ne reçoit jamais d'cliquez sur événements, mais si je retourne false
puis F2 ne fonctionne plus.
Cela peut être réalisé en utilisant uniquement des écouteurs d'événement? Je préfère ne pas se salir avec le PLAF fonctions, si je peux l'éviter.
OriginalL'auteur finnw | 2009-08-12
Vous devez vous connecter pour publier un commentaire.
Vous aurez à faire votre propre cellEditor et ovveride
Vous pouvez faire la distinction entre simple et double-cliquez avec la clickCount sur le eventObject
Si ses un seul Clic et sa sur une cellule sélectionnée, vous pouvez retourner vrai sinon retourner faux;
récupérer de ligne et de colonne avec
pour activer la touche F2 vous pouvez ajouter des inputMap fr actionMap entrées
et de votre action, vous pouvez alors le feu de l'cellediting vous
OriginalL'auteur Peter
La DefaultCellEditor a un setClickCountToStart() la méthode de contrôle de clics de souris pour l'édition. La valeur par défaut est 2. La modification de cette aura aucun effet sur F2 fonctionnalité.
Par conséquent, vous pouvez définir l'édition d'un triple clic.
Vous ne savez pas exactement comment gérer les deux simples clics pour commencer l'édition, mais je suppose que vous utilisez une Minuterie pour garder une trace de la première de la souris, puis faire le montage si le deuxième simple clic est à l'intérieur de vous intervalle de temps.
OriginalL'auteur camickr
J'ai résolu ce problème en enveloppant l'existant
CellEditor
avec unProxy
et interceptant les appels àisCellEditable
, retourner false pour tous les événements de la souris et de déléguer tous les autres appels à l'originalCellEditor
.C'est un peu plus complexe que camickr de la solution, mais fonctionne pour tous les éditeurs (j'en ai 4 en tout.)
Je n'ai pas mis en œuvre cette partie encore, mais oui, cela sonne juste. Il n'y a pas de limite de temps.
OriginalL'auteur finnw