6
votes

Sélection de plusieurs lignes dans JTable

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.


0 commentaires

4 Réponses :


2
votes

Vous pouvez obtenir l'intervalle de sélection avec le code similaire à celui-ci: xxx

puis, quand une case à cocher est cochée (écoute itemEvent ), vous devez itérer à partir du MinselectedRow au maxSelectedrow et modifiez les cases cochées de l'état. C'est tout.


0 commentaires

4
votes

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.

Ensuite, vous pouvez utiliser TABLE.GETSELRESHOWS (), pour obtenir les index de toutes les lignes sélectionnées que vous devez mettre à jour.


3 commentaires

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é.



2
votes

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: xxx


8 commentaires

@ 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 a un clone () qui pourrait être utile. De plus, les valeurs du modèle de données sont booléen , donc je pense que la conversion vers boolean et boolean.valueof () peut être éliminé.


@ Hovercraft plein d'anguilles: le clone () méthode s'est avéré fruit, mais j'ai utilisé votre exemple pour implémenter la suggestion de @ Camikr.



15
votes

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 Sélection conviendrait également à un menu ou à un popup.

Vérifiez un tas xxx


3 commentaires

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 , vu ici ?