Comment puis-je intégrer un contrôle dans le JTableHeader d'une JTable ?
Dans une JTable avec une colonne de type booléen, le moteur de rendu par défaut est un JCheckBox. Bien que les cellules individuelles puissent être sélectionnées sans effort en fonction de l'interaction de l'utilisateur, il peut s'avérer avantageux de cocher ou de décocher facilement toutes les cases.
Résoudre le problème de bonne conduite
Un puits -le contrôle comportemental dans JTableHeader doit répondre aux événements de la souris, fournir un retour visuel et s'aligner de manière transparente avec celui de l'en-tête. apparence.
Solution : SelectAllHeader
La classe SelectAllHeader étend JToggleButton et implémente TableCellRenderer. Il ajoute une case à cocher à l'en-tête du tableau et répond aux clics de souris dans une colonne spécifique. L'état de la case à cocher bascule entre « Sélectionner tout » et « Sélectionner aucun » en fonction de l'état actuel de toutes les cases à cocher dans la colonne correspondante.
Détails de mise en œuvre
Le SelectAllHeader Le constructeur prend la table et la colonne cibles comme paramètres. Il applique des styles visuels cohérents avec l'en-tête du tableau, ajoute un ItemListener pour basculer l'état de la case à cocher et ajoute des écouteurs Mouse et TableModel pour gérer les clics de souris et maintenir la synchronisation avec le modèle.
Utilisation
Pour intégrer SelectAllHeader, récupérez la colonne souhaitée à partir du modèle de colonne de la table et définissez son moteur de rendu d'en-tête sur une instance de SelectAllHeader.
Avantages
Cette solution :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!