bonjour,
j'ai un prog qui affiche une DefaultListModel dans une JList,
je voudrais savoir comment faire pour formatter le texte comme par exemple changer la couleur ou rendre en gras une ligne de texte.
Merci
Version imprimable
bonjour,
j'ai un prog qui affiche une DefaultListModel dans une JList,
je voudrais savoir comment faire pour formatter le texte comme par exemple changer la couleur ou rendre en gras une ligne de texte.
Merci
Il faut que tu crées une classe implémentant l'interface ListCellRenderer puis affecter ce renderer à ta JList de la façon suivante:
Code:
1
2 myList.setCellRenderer(new MyCellRenderer())
Pour plus d'infos cf la javadoc de la JList il y a ce qu'il te faut dedans:
http://java.sun.com/j2se/1.5.0/docs/...ing/JList.html
cette technique.
comment faire si je veux que chaque item dans la JList ait un formattage personnalisé? par exemple chaque item a une couleur spécifique.
Merci
Salut,
Dans la méthode getListCellRendererComponent de ListCellRenderer tu passes l'indice en argument. En la redéfinissant tu peux tester cet indice et attribuer une couleur pour chaque indice, ou même pour chaque objet, car l'objet item est aussi dans les arguments
Va faire un tour ici : http://java.sun.com/j2se/1.5.0/docs/...lRenderer.html je pense que tu verras comment faire...
dans ma liste j'ai besoin d'accentuer une ligne selon la priorité de la tâche à accomplir. Dison par exemple Rouge pour priorité haute, orange pour priorité moyenne, et bleu pour basse priorité.
si je crée un CellRender, je ne peux affecter que deux styles (sélectionné et non sélectionné) par classe implémentant l'interface ListCellRenderer.
dois je créer plusieurs type de CellRenderer?
Pas forcément. Si par exemple dans ton CellRenderer tu décides que les 3 premières lignes sont rouges et les autres vertes, dans la méthode getListCellRendererComponent que tu redéfinis tu peux faire un test du style :
Après tu fais tous les tests que tu veux dans la méthode, tu as tous les éléments en paramètre te permettant de savoir ce qu'il y a dans la case etc...Code:
1
2
3
4
5
6
7
8 public Component getListCellRendererComponent(JList list,Object value,int index, boolean isSelected, boolean cellHasFocus) { if(index < 3){ this.setBackground(Color.red); } else { this.setBackground(Color.green); } }
je reformule ma demande :
je veux pouvoir formatter à loisir les components qui sont dans la JList.
typiquement, je sélectionne un component et j'appuie sur un bouton pour incrémenter la taille de la police.
j'ai pensé à faire différents cellRenderer qui sont appelés selon l'incrémentation.
par contre ce qui serait plus économique est d'appeler une méthode qui recoit en argument l'incrément et par conséquent formatte le component.
Salut,
Tu veux donc que la police puisse avoir une taille différente dans les différentes lignes.
Donc un seul cellRenderer suffit.
Tu lui ajoutes un attributs, par exemple un Vector fontSize. Chacun de ses éléments contient la taille de la police pour la ligne de même indice de ta JList.
Toujours dans ta méthode getListCellRendererComponent, tu fais :
Et quand tu sélectionnes une ligne que tu incrémentes avec ton bouton la taille, tu appelles l'accesseur à ton Vector fontSize et tu donnes à l'indice de la ligne sélectionnée la nouvelle taille.Code:
1
2 this.setFont(new Font(null,Font.PLAIN,fontSize.elementAt(index)));
Ensuite tu peux adapter au traitement que tu veux...
A plus
Bonjour,
j'ai essayé ta méthode qui marche impec.
Merci.