Plusieurs lignes de sélection dans JTable
J'ai une JTable, qui a une colonne de texte qui n'est pas modifiable et la deuxième colonne est une case à cocher qui affiche des valeurs booléennes.... Maintenant ce que je veux, c'est, lorsque l'utilisateur sélectionne plusieurs lignes et décoche une des cases cochées, puis toutes les cases à cocher en vertu de sélection devrait obtenir de manière incontrôlée, et vice versa.
OriginalL'auteur sasidhar | 2010-12-24
Vous devez vous connecter pour publier un commentaire.
À l'aide de @Aéroglisseur l'exemple de @camickr les conseils, l'exemple ci-dessous montre un adapté de l'interface utilisateur. Bien qu'il utilise les boutons, la
SelectionAction
serait également approprié pour un menu ou un pop-up.Salut, je suis désolé pour la réponse mais je viens de trouver cela un peu tout à l'heure et voudrais des commentaires sur l'ajout d'un écouteur pour les changements dans la liste. Actuellement, j'utilise un mouseListener, mais il est tir avant que la liste est en fait mis à jour. Comment pourrais-je ajouter un écouteur d'obtenir des mises à jour pour la liste à mesure qu'ils se produisent?
Peut-être un
TableCellEditor
, vu ici?OriginalL'auteur trashgod
Le problème est que lorsque vous cliquez sur une case pour modifier la valeur de la case à cocher, la sélection de toutes les lignes seront perdues. De sorte que vous pouvez avoir besoin d'utiliser un clic droit de la souris pour afficher un menu contextuel qui contient sélectionner/désélectionner les valeurs.
Ensuite, vous pouvez utiliser le tableau.getSelectedRows(), pour obtenir l'index de toutes les lignes sélectionnées, vous devez mettre à jour.
Vous ne pouvez pas utiliser un clic de souris pour deux fonctions différentes. La solution est une bonne INTERFACE utilisateur. J'ai donné une suggestion pour utiliser un menu contextuel. Une autre solution est d'utiliser menuItems à partir 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 de l'INTERFACE utilisateur à faire de même.
Je suis d'accord avec @camickr; j'ai ajouté un exemple à proximité.
OriginalL'auteur camickr
Vous pouvez obtenir la sélection de l'intervalle avec un code similaire à ceci:
Puis, quand une case est cochée (écouter
ItemEvent
), vous devez effectuer une itération à partir de laminSelectedRow
à lamaxSelectedRow
et de modifier les cases cochées état. C'est tout.OriginalL'auteur Roman
Je suis d'accord avec Romain, que son idée serait de travailler si vous utilisez un champ de classe pour tenir le min et le max de sélection. Par exemple:
Plein D'Anguilles case 2, décochez la case 2, puis cochez la case 4..... ensuite automatiquement la case 2 est en cours de vérification......
Je ne suis pas surpris que les qui devrait se produire si le 2 est encore sélectionné, qui était, je pensais que le comportement désiré pour le programme: Si vous cochez ou décochez une case à cocher, toutes les lignes sélectionnées imiter que la case à cocher de l'état, y compris une seule ligne sélectionnée à gauche au cours de la dernière sélection. Si vous ne désirez pas ce comportement, une façon de contourner cela est de définir le min et le max de ligne sélectionnée à -1 à la fin de la TableModelListener de tableChanged méthode. Je vais mettre à jour le code ci-dessous pour vous montrer ce que je veux dire.
+1 Bon exemple. Il fonctionne comme décrit, mais il ne s'occupe que des sélections contiguës.
Vous êtes bien sûr le droit, et merci pour l'aperçu. Laissez-moi voir ce que je peux faire...
OriginalL'auteur Hovercraft Full Of Eels