J'ai une jtalle, qui a une colonne qui est text non modifiable et la deuxième colonne est une case à cocher qui affiche des valeurs booléennes .... Maintenant ce que je veux, c'est que l'utilisateur sélectionne plusieurs rangées et décoque Une des cases à cocher sélectionnées, toutes les cases à cocher sous Sélection doivent être décochées et vice versa. P>
4 Réponses :
Vous pouvez obtenir l'intervalle de sélection avec le code similaire à celui-ci: puis, quand une case à cocher est cochée (écoute itemEvent code>), vous devez itérer à partir du
MinselectedRow Code> au
maxSelectedrow code> et modifiez les cases cochées de l'état. C'est tout. P> p>
Le problème est que lorsque vous cliquez sur une case à cocher pour modifier la valeur de la case à cocher, la sélection de toutes les lignes sera perdue. Donc, vous devrez peut-être utiliser une souris droite Cliquez pour afficher un menu contextuel contenant des valeurs Select / Désélectionner. p>
Ensuite, vous pouvez utiliser TABLE.GETSELRESHOWS (), pour obtenir les index de toutes les lignes sélectionnées que vous devez mettre à jour. P>
Vous avez raison .... Lorsque vous avez cliqué sur la case à cocher, la sélection de la ligne est perdue ..... Y a-t-il un moyen autour de cela sans utiliser le clic droit ..?
Vous ne pouvez pas utiliser de souris clic pour deux fonctions différentes. La solution est une UI appropriée. J'ai donné une suggestion à utiliser un menu contextuel. Une autre solution consiste à utiliser des ménulseurs d'un menu avec des accélérateurs pour sélectionner / désélectionner. De cette façon, l'utilisateur peut utiliser la souris ou le clavier. Ou vous pouvez ajouter des boutons à l'interface utilisateur pour faire de même.
Je suis d'accord avec @camickr; J'ai ajouté un exemple à proximité.
Je suis d'accord avec Roman que son idée fonctionnerait si vous utilisez un champ de classe pour contenir la sélection MIN et Max. Par exemple:
@ Hovercraft pleine d'anguilles, bien que votre code ait du sens, lorsque je suis exécuté sur mon système, son comportement de manière inattendue, la sélection BUNCH fonctionne tout simplement bien, mais après que la sélection normale tire également la sélection de bouchons ......
@HOvercraft Full of Eels Cochez la case 2, décochez la case 2, puis cochez la case 4 ..... puis automatiquement la case 2 est en cours de vérification ......
Je ne suis pas surpris que cela devrait se produire si 2 est toujours sélectionné, qui était que je pensais le comportement souhaité pour le programme: Si vous cochez la case ou décochez une case à cocher, toutes les lignes sélectionnées imiteront l'état de la case à cocher, y compris une seule ligne sélectionnée. laissé de la dernière sélection. Si vous ne désirez pas ce comportement, il s'agit d'une solution consiste à définir la ligne sélectionnée Min et Max à -1 à la fin de la méthode TableModellistener. Je vais mettre à jour le code ci-dessous pour vous montrer ce que je veux dire.
+1 Bon exemple. Cela fonctionne comme décrit, mais ne gère que des sélections contiguës.
Vous êtes bien sûr correct et merci pour les idées. Laisse moi voir ce que je peux faire...
Comme la trashgod a mentionné son travail uniquement pour des sélections contiguës ... J'ai essayé de stocker les valeurs des lignes sélectionnées, mais pas de succès ici non plus ..... :(
@ Hovercraft pleine d'anguilles: defaultListselectionModel code> a un
clone () code> qui pourrait être utile. De plus, les valeurs du modèle de données sont
booléen code>, donc je pense que la conversion vers
boolean code> et
boolean.valueof () code> peut être éliminé.
@ Hovercraft plein d'anguilles: le clone () code> méthode s'est avéré fruit, mais j'ai utilisé votre exemple pour implémenter la suggestion de @ Camikr.
Utilisation d'un exemple de @ Hovercraft et des conseils @ Camickr, l'exemple ci-dessous montre une interface utilisateur appropriée. Bien qu'il utilise des boutons, le code> Sélection code> conviendrait également à un menu ou à un popup.
p>
Voir les commentaires ici si Tri est activé.
Bonjour, je suis désolé d'avoir répondu mais je viens de trouver cela il y a un peu de temps et j'aimerais une entrée sur l'ajout d'un auditeur pour les modifications de la liste. À l'heure actuelle, j'utilise un mouselistener, mais il tire avant que la liste soit réellement mise à jour. Comment puis-je ajouter un auditeur pour obtenir des mises à jour de la liste comme elles se produisent?
Peut-être un nappeCelleditor code>, vu ici ?