Je cherche à générer une liste d'icones avec une JList, mais je ne sais pas comment placer une image (icone) au dessus du texte de l'icone.
Quelqu'un aurait un bout de code intéressant ???
Je cherche à générer une liste d'icones avec une JList, mais je ne sais pas comment placer une image (icone) au dessus du texte de l'icone.
Quelqu'un aurait un bout de code intéressant ???
Pas tout cuit mais j'ai un joli petit tuto Sun sur les Renderers en stock: http://java.sun.com/docs/books/tutor....html#renderer
(le fonctionnement est exatement le même pour les JList et les JComboBox)
Salut,
Regarde ici en bas de la page il y a un exemple de JList avec des icones
http://www.apl.jhu.edu/~hall/java/Sw...ial-JList.html
++
Aussi intéressant soient ces tutoriaux, je ne trouve pas la solution à mon problème.
J'arrive à placer un texte et une image dans une cellule d'une JList, mais par défaut l'image et le texte sont alignés sur une ligne.
Ce que je veux c'est qu'ils soient alignés verticalement (le texte sous l'image) , et là ça se complique.
Encore un petit truc : comment fait-on pour aligner ces icones les uns à la suite des autres sur une (ou plusieurs) ligne(s) ???
J'ai bien essayé la commande suivante sans y arriver : list.setLayoutOrientation(JList.HORIZONTAL_WRAP);
Si si la réponse est dans les tutos, il suffit juste de comprendre le principe de ton renderer.
Il s'aguit d'un JPanel, or on peut manipuler sans problème le layout du JPanel. Donc à partir de ça tu fais ce que tu veux...
J'ai essayé avec un JPanel, mais le résultat n'est pas terrible (chevauchement des icones et du texte) : comprend pas !!!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 public static class VaultExplorerRenderer extends JPanel implements ListCellRenderer { public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { // alignement des icones list.setLayoutOrientation(JList.HORIZONTAL_WRAP); // couleur de fond de la liste if(isSelected) setBackground(new Color(230,240,240)); else setBackground(Color.white); // détection du fichier ou dossier pour y appliquer l'icone correspondant JLabel label = new JLabel(value.toString()); label.setHorizontalAlignment(JLabel.CENTER); File file = new File(GlobalSettings.getCurrentDirectory() + File.separator + value.toString()); if(file.isDirectory()) { add(folderCloseIcon, BorderLayout.CENTER); add(label, BorderLayout.SOUTH); } else { add(fileIcon, BorderLayout.CENTER); add(label, BorderLayout.SOUTH); } return this; } }
En fait au final tu peux aussi n'utiliser qu'un seul JLabel et lui dire de positionner le texte en dessous.
http://java.sun.com/docs/books/tutor...nts/label.html
J'avais un peu zappé ce détail.
Sorry
Pas de problème, j'ai triuvé la solution : il fallait vider la panel au début :
Et là ça marche beaucoup mieux ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 list.setLayoutOrientation(JList.HORIZONTAL_WRAP); setLayout(new BorderLayout()); removeAll(); // vidage du panel // couleur de fond de la liste if(isSelected) setBackground(new Color(230,240,240)); else setBackground(Color.white);
Partager