Bonjour,
Je voudrais savoir s'il est possible de modifier les titres par défaut (A, B, C, ...) d'un JTable sans utiliser de TableModel ?
Merci par avance pour votre réponse.
Bonjour,
Je voudrais savoir s'il est possible de modifier les titres par défaut (A, B, C, ...) d'un JTable sans utiliser de TableModel ?
Merci par avance pour votre réponse.
C'est le TableColumnModel qui porte les noms de colonnes.
Et ta table a de toute façon besoin d'un TableModel et d'un TableColumnModel pour fonctionner.
Mais comme chez Sun ils sont gentils, il en ont mis par défaut, c'est d'ailleurs le TableColumnModel par défaut qui met A,B,C etc...
Si en fait tu veux juste changer les titres, il te suffit de faire :
Fred
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 table.getColumn(0).setHeaderValue("Mon titre à la place de A"); table.getColumn(1).setHeaderValue("Mon titre à la place de B"); table.getColumn(2).setHeaderValue("Mon titre à la place de C"); ...
Bonjour kwxyz,
J'ai testé ce que tu m'as dis, il y a une erreur au lancement, je te la donne si tu as une idée, je veux bien de ton aide.
java.lang.IllegalArgumentException: Identifier not found
at javax.swing.table.DefaultTableColumnModel.getColumnIndex(Unknown Source)
at javax.swing.JTable.getColumn(Unknown Source)
at webmail.init(webmail.java:98)
at sun.applet.AppletPanel.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
La ligne 98 correspond à ceel-ci :
table_ReceptionList.getColumn(0).setHeaderValue("login");
Peut-être que ta table n'a aucune colonne. Tu tentes d'accéder à la colonne zéro alors qu'elle n'existe pas.
D'abord j'ai écrit beaucoup de bêtises...
Les noms de colonnes par défaut ne viennes pas du TableColumnModel mais du TableModel fournit par défaut.
Ensuite le getColumn() de la table ne prend pas un index comme je l'ai écrit, mais l'identifiant de la colonne.
Comme je ne construit jamais mes table sans créer moi-même les colonnes, je ne sais pas si le code que je te donne vaut qqchose, mais essaye tout de même :
Sinon, regarde les constructeurs de JTable, la plupart on une version ou tu peux donner un tableau avec le nom des colonnes.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 table.getColumn("A").setHeaderValue("Mon titre à la place de A"); table.getColumn("B").setHeaderValue("Mon titre à la place de B"); table.getColumn("C").setHeaderValue("Mon titre à la place de C");
Fred
ca marche niquel
Merci kwxyz
J'ai deux autre questions toujours en rapport avec les JTables que j'ai du mal à utiliser
Je voudrais savoir si il est possible de redimensionner un JTable après qu'il aie été déclaré.
Je voudrais également savoir si il est faisable d'empêhcer l'édition d'un JTable.
tout cela se fait sans les tablemodel
Merci de votre aide
Salut,
Pour la largeur, il suffit d'utiliser
Sur la TableColumn que tu veux redimensionner.
Code : Sélectionner tout - Visualiser dans une fenêtre à part setPreferredWidth(int preferredWidth)
Pour l'edition, c'est dans le TableModel que ca se passe avec
Si je ne dis pas de bétises
Code : Sélectionner tout - Visualiser dans une fenêtre à part isCellEditable(int rowIndex, int columnIndex)
Exemple :
et
Code : Sélectionner tout - Visualiser dans une fenêtre à part table.getColumn("A").setPreferredWidth(25)
En implémentant l'interface AbstractTableModel (ce qui demande à redéfinir un modèle, peut être y'a-t-il plus simple ?)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 public boolean isCellEditable(int row, int col) { if (col==0) return true; else return false; }
Salut RR instinct,
Je n'utilise pas de TableModel donc ta solution ne me parait pas appropriée à mon problème, mais merci quand même de ton aide
Ne pas utiliser de TableModel n'est pas une solution. De fai,t une JTable utilise toujours un TableModel (même si tu ne l'a pas explicitement déclaré, les contructeurs prenant des tableaux ou vecteurs en paramètres ont pour but de créer un TableModel par défaut), et dès que tu voudras customiser ta JTable il te faudra proposer un TableModel spécifique (par exemple pour attacher un renderer ou un editor à une classe spécifique pour changer l'apparence ou la méthode de saisie, rendre certaines colonnes éditables, enfin plein de choses).
De fait utilliser une JTable sans utiliser de TableModel c'est comme si l'on voulait planter un clou avec un Marteau Smoby en plastique, on ne va pas bien loin.
Disons que tu n'utilise pas ton propre TableModel mais celui par défaut qui est crée avec la JTable, maintenant, je ne sais pas comment faire pour rendre une colonne non éditable dans ces conditions désolé.
Par contre la redimensionnement doit fonctionner quand même
EDIT : j'ai trouvé cela qui confirme mon propose :
http://java.developpez.com/faq/gui/?...e_celleditable
Tout a fait le TableModel par défaut renvoie true pour isCellEditable() sans tenir compte des paramètre, en conséquence, on ne peut pas rendre les cellules non éditable sans définir son propre modèle de donné.
C'est pas bien méchant.Je n'utilise pas de TableModel donc ta solution ne me parait pas appropriée à mon problème, mais merci quand même de ton aide
Pour faire bien, tu devrais hériter de AbstractTableModel et gérer toi-même le stockage de tes données comme ça va bien. Mais si tu veux démarrer en douceur, tu peux hériter de DefaultTableModel, tout est déja fait, tu n'a qu'a redéfinir la méthode isCellEditable().
Fred
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager