Didacticiel JTable modifiable
Y a de bons livres ou site web qui passent sur la création d'un JTable
? Je veux faire une colonne modifiable. Je voudrais mettre un héritée JCheckBox
composant (que nous avons créé ici) dans l'une des colonnes de la table au lieu d'avoir juste la table, mettre JCheckBox
en se basant sur qu'il soit modifiable boolean
champ.
J'ai le JFC Swing Tutoriel Deuxième Édition livre, mais j'aimerais juste savoir si il y a d'autres exemples que j'ai pu regarder et apprendre à composer avec les tables mieux. Le livre semble juste de prendre la java "trail" en ligne et le mettre dans le livre.
Je suis re-lecture des trucs bien, juste curieux de savoir si quelqu'un a trouvé quelque chose qui pourrait aider plus.
source d'informationauteur Arthur Thomas
Vous devez vous connecter pour publier un commentaire.
De faire une colonne modifiable, vous devez remplacer la
isCellEditable
méthode dans leTableModel
. La création d'unTableModel
est assez facile si vous héritezAbstractTableModel
et je le recommande pour tous, mais le plus simpleJTable
s.Cependant, l'adaptation de la
TableModel
n'est qu'une partie de ce que vous devez faire. En fait pour obtenir un composant personnalisé dans leJTable
vous devez définir un rendu de cellule personnalisé. Pour une utilisation interactive composant personnalisé, vous devez définir une cellule personnalisé de l'éditeur. Dans certains cas, il suffit d'utiliser légèrement modifiée versions des classes par défaut pour cette.Rédacteurs
Si vous avez déjà obtenu un composant personnalisé se fait facilement à l'aide de la délégation: Créer une nouvelle classe de mise en œuvre
TableCellEditor
et le retour d'un nouveau instance de la composante dans legetCellEditorComponent
méthode. Les paramètres de cette méthode comprennent la valeur actuelle ainsi que la cellule de coordonnées, un lien de retour vers la table et de la météo ou non la cellule est sélectionnée.La
TableCellEditor
a aussi une méthode qui est appelée lorsque l'utilisateur s'engage à modifier le contenu de la cellule (où vous pouvez valider la saisie de l'utilisateur et d'ajuster le modèle) ou de l'annulation d'une modification. Veillez à appeler lastopEditing()
méthode sur votre éditeur de texte si jamais vous par programme abandonner le montage, sinon le composant de l'éditeur restera sur l'écran-pour cette fois m'a pris 2 heures à déboguer.Note que, dans un
JTable
éditeurs et uniquement les éditeurs de recevoir des événements! L'affichage d'un bouton peut être fait en utilisant un moteur de rendu. Mais pour obtenir un fonctionnement le bouton, vous devez implémenter un éditeur de texte avec la bonneEventListeners
enregistré. L'enregistrement d'un listener sur un moteur de rendu ne fait rien.Convertisseurs
Mise en œuvre d'un moteur de rendu n'est pas strictement nécessaire pour ce que vous décrivez dans votre question, mais en général, on finit par faire, de toute façon, si seulement pour des modifications mineures. Les convertisseurs, à la différence des éditeurs, sont de la vitesse critique. Le
getTableCellRendererComponent
d'un moteur de rendu est appelée une fois pour chaque cellule du tableau! Le composant retournés par un moteur de rendu est utilisé uniquement pour la peinture de la cellule, pas d'interaction, et peut donc être "réutilisés" pour la cellule suivante. En d'autres termes, vous devez ajuster la composante (par exemple à l'aide desetText(...)
ousetFont(...)
si c'est unTextComponent
) dans le moteur de rendu, vous devez vous pas instancier un nouveau -- c'est un moyen facile de paralyser la performance.mises en garde
Noter que pour les convertisseurs et les éditeurs de travail, vous devez dire à la
JTable
lors de l'utilisation d'un certain moteur de rendu/éditeur. Il existe essentiellement deux façons de le faire. Vous pouvez définir la valeur par défaut rendu de cellule/éditeur de pour un certain type l'utilisation desJTable
méthodes. Pour cette façon de travailler, votreTableModel
doit revenir exactement ce type dans legetColumnClass(...)
méthode! La valeur par défaut de la table de modèle pas le faire pour vous, elle renvoie toujoursObject.class
. Je suis sûr qu'il y en a déconcerté beaucoup de gens.L'autre façon de définir l'éditeur/convertisseur est par définition explicite sur la colonne elle-même, qui est, par l'obtention de l'
TableColumn
via legetTableColumn(...)
méthode de laJTable
. C'est beaucoup plus élaboré, cependant, c'est aussi la seule façon d'avoir deux moteurs de rendu/éditeurs pour une seule classe. E. g. votre modèle peut avoir deux colonnes de la classe String qui sont rendus dans les façons totalement différentes, peut-être une fois à l'aide d'unJLabel/DefaultRenderer
et l'autre à l'aide d'unJButton
pour accéder à une version plus élaborée de l'éditeur.JTable
avec ses moteurs de rendu personnalisé et éditeurs, c'est très polyvalent, mais il est aussi beaucoup de choses à prendre, et il y a beaucoup de choses à faire le mal. Bonne chance!Comment Utiliser des Tableaux dans Le Swing Tutoriel est une lecture obligatoire pour toute personne, la personnalisation des JTables. En particulier, de lire et de relire Concepts: les Éditeurs et les moteurs de renducar il faut généralement un certain temps pour qu'il "clic". Les exemples sur les convertisseurs et les éditeurs sont aussi très intéressants.
La classe que vous voulez voir dans l'extension à créer votre propre comportement est DefaultTableModel. Qui vous permettra de définir votre propre comportement. Un tutoriel décent peut être trouvé sur les chaises du site.
Ce tutoriel à partir de la java hall est facile à suivre. En ligne Swing trail pour JTable que vous renvoi indique qu'il a été mis à jour. Avez-vous parcourir toute la chose est possible, mieux (n'est-ce pas la plus récente de toujours mieux) informations?
Si vous essayez d'utiliser un simple
JTable
avec 1 colonne modifiable et vous connaissez l'emplacement des colonnes, vous pouvez toujours utiliser la valeur par défaut de la table de modèle et de surcharge duisCellEditable
appel.quelque chose comme ceci :
Et pour la case à cocher créer une classe de rendu de
Quelques classes utiles sont:
Package javax.swing.table
:TableModel
- Interface pour unetablemodel
AbstractTableModel
- Classe de Nice pour étendre pour créer votre propre table personnalisée avec des structures de donnéesDefaultTableModel
Par défaut d'un modèle de table qui peut traiter avecarrays[]
etVectors
Pour désactiver la modification sur n'importe quelle cellule, vous devez remplacer la
isCellEditable(int row, int col)
méthodedans votre Modèle de table, vous devez remplacer "isCellEditable" et "setValueAt" les fonctions, comme ci-dessous.
La colonne 4 est la colonne des cellules modifiables.
Alors lorsque vous double-cliquez sur la cellule et tapez quelque chose,
setValueAt() sera appelée, et enregistrer la valeur de la tableModel de FAIRE,domaine col4.