Comme l'indique le titre, j'ai un JTable
et je ne peux pas éditer des colonnes "arbitraires". J'ai 4 colonnes et seule la première colonne est éditable. La première colonne contient des fichiers et un éditeur spécial, les deux colonnes suivantes ont des chaînes et la dernière colonne a des entiers. J'utilise un modèle personnalisé et je renvoie true à partir de la méthode isCellEditable
. Bien sûr, j'ai d'abord consulté plusieurs sites Web pour obtenir de l'aide, mais je n'ai rien trouvé qui m'aide. J'ai utilisé le code source Java pour remplacer plusieurs méthodes JTable
et insérer des instructions d'impression. En particulier, j'ai trouvé que table.editCellAt (ligne, col) renvoie toujours false car le composant d'édition retourné par l'éditeur de cellule est toujours null. Donc, j'ai naturellement essayé de remplacer l'éditeur en utilisant table.setDefaultEditor(String.class, new MyEditor())
. Étrangement, cela n'a pas travaillé. Tous les éditeurs pour les colonnes String étaient toujours le GenericEditor que JTable utilise par défaut. J'ai ensuite essayé d'ajouter les rédacteurs à chaque colonne en procédant comme suit:Impossible d'éditer des colonnes JTable apparemment arbitraires
TableColumnModel model = table.getColumnModel();
for(int i = 1; i < model.getColumnCount(); i++){
model.getColumn(i).setCellEditor(new MyEditor());
}
Notez que i commence à 1 parce que la première colonne a déjà un éditeur approprié. Je suis à court d'idées à ce stade, alors je suis venu à la bonne personne à Stack Overflow pour de l'aide.
Edit: J'utilise un DefaultTableModel
, je simplement l'emportaient sur isCellEditable
pour vous assurer qu'il retourne toujours vrai (même si DefaultTableModel
est censé faire être par défaut). Je l'ai fait pour réduire le nombre de réponses de débogage inutiles et inutiles. De plus, le fait qu'une colonne soit modifiable mais que d'autres ne le soient pas semblerait indiquer que le problème est ailleurs.
Éditer: Il semblerait que le problème repose sur la création de colonnes. Un professeur a suggéré de changer setAutoCreateColumnsFromModel
et il semble avoir résolu le problème.
Vous avez un code personnalisé et cela ne fonctionne pas? Eh bien c'est où je commencerais. Commencez par faire fonctionner le code en utilisant les classes fournies avec le JDK. Utilisez le DefaultTableModel pour cela. Ensuite, une fois que vous avez prouvé que cela fonctionne, vous faites un changement à la fois avec votre code personnalisé. Quand il cesse de fonctionner, vous savez où est le problème et vous pouvez poster votre SSCCE (http://sscce.org) montrant le problème. – camickr
@gerenba: J'ai migré vos informations supplémentaires à la question. S'il vous plaît revenir si incorrect. – trashgod
Le tutoriel Swing a un exemple simple qui utilise DefaultTableModel, qui peut être une bonne fondation SSCCE. http://download.oracle.com/javase/tutorial/uiswing/components/table.html – trashgod