Ajouter le texte et l'icône (avec MouseListener) à la colonne JTable
-
19-09-2019 - |
Question
Je veux mettre en œuvre les fonctionnalités suivantes mais je suis confus s'il est possible en Java. Si oui, que comment? S'il vous plaît aider:
Je veux créer un JTable type de table où 1er rang de la table contient les noms de colonnes et une icône dans chaque colonne à savoir dans chaque cellule de 1er rang. En cliquant sur cette icône devrait conduire à la suppression de cette colonne de la table (possible en utilisant MouseListener ??).
J'ai trouvé beaucoup de solution où je peux ajouter le bouton à une cellule JTable mais aucun qui décrit l'ajout du texte et l'icône (avec MouseListener) à une cellule. S'il vous plaît voir si vous pouvez aider et merci beaucoup pour la lecture.
La solution
Vous pouvez créer un TableCellRenderer
personnalisé qui étend JLabel
. Ce JLabel
peut être créé avec une icône (JLabel
peut afficher des icônes, à droite ou à gauche du texte). Vous voulez que le getTableCellRendererComponent
pour tester wether la ligne étant rendu est le premier ou non, et le cas échéant, définir l'icône, sinon non.
Pour l'action de suppression, vous pouvez ajouter un MouseListener
sur la table, et lors du traitement de la méthode mouseClicked
, vous pouvez trouver la cellule qui a été cliqué dans en testant la rowAtPoint
et columnAtPoint
en créant un Point
du mouseEvent.getX()
et mouseEvent.getY()
. Si vous déterminez la première ligne avec l'icône a été cliqué, vous pouvez supprimer la colonne du modèle de colonne.
Si par 1er rang , vous voulez dire en fait l'en-tête de table, vous pouvez créer le même pour le JTableHeader
renderer, et régler la MouseListener
sur ce composant.
Autres conseils
Je ne comprends pas votre question.
Je veux créer une sorte de JTable table où 1ère rangée de table contient les noms de colonnes et une icône
Voulez-vous dire la table en-tête, comme la façon dont le tri fonctionne en affichant le nom de la colonne et la direction de tri?
Si oui, alors vous utilisez un moteur de rendu personnalisé pour l'en-tête de table et d'ajouter un MouseListener à l'en-tête pour déterminer la colonne a été cliqué. Vous devriez être en mesure de personnaliser le par défaut Table-tête Renderer pour faire ce que vous voulez.
Ou voulez-vous dire la première ligne de données dans le tableau. Si oui, alors vous avez encore besoin d'utiliser un moteur de rendu personnalisé mais cette fois vous ajoutez le MouseListener à la table pas l'en-tête de table.
Dans les deux cas, vous pouvez utiliser la méthode TableColumnModel.removeColumn () pour supprimer la colonne de la vue de la table.