J’ai un combobox que je remplis avec du texte et des images. Pour cela j’ai donc définis une nouvelle classe ComboBoxRenderer afin de pouvoir insérer mes images. Il se trouve que sous Eclipse je n’ai aucun problème, alors que sous Linux, j’ai un message d’erreur car les images ne sont pas trouvées (Couldn't find file: " + titre de l’image) . Je suppose donc un problème de chemin d’accès…

Je vous colle ici les extraits de code intéressants :
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
 
 
public class WChoice extends JPanel implements ItemListener {
 
private JComboBox meschoix;
ImageIcon[] images;
String[] logoStrings = { "Lyon", "Bordeaux", "Lille", "Lens", "Marseille","Rennes", "Auxerre", "Paris", "Nice", "Le_Mans", "Monaco", "Nancy", "Nantes", "St-Etienne", "Toulouse", "Sochaux", "Troyes", "Ajaccio","Strasbourg", "Metz" };
 
public void init() {
 
		images = new ImageIcon[logoStrings.length];
		Integer[] intArray = new Integer[logoStrings.length];
		Championnat ch = new Championnat("fic.res");
		str = new String[ch.getNbrMaxEq()];
		maxInd = ch.getNbrMaxEq();
		for (int i = 0; i < ch.getNbrMaxEq(); i++) {
			str[i] = ch.getNomEquipe(i + 1);
			intArray[i] = new Integer(i);
			images[i] = createImageIcon("images/"+logoStrings[i] + ".jpg");
			if (images[i] != null)
				images[i].setDescription(logoStrings[i]);
			JComponent newContentPane = new WChoice();
			newContentPane.setOpaque(true);
		}
// Creation du combo box
		meschoix = new JComboBox(intArray); 
// mon custom d'un combobox
		ComboBoxRenderer renderer = new ComboBoxRenderer();
// taille du combobox
renderer.setPreferredSize(new Dimension(80, 50));   		meschoix.setRenderer(renderer);
		meschoix.setMaximumRowCount(3);
		add(meschoix, BorderLayout.PAGE_START);
		meschoix.addItemListener(this);
	}
 
protected static ImageIcon createImageIcon(String path) {
		URL imgURL = WChoice.class.getResource(path);
		if (imgURL != null)
			return new ImageIcon(imgURL);
		else { System.err.println("Couldn't find file: " + path); return null; }
	}
 
…...
 
// cette classe se trouve toujours dans la première classe initiale WChoice
class ComboBoxRenderer extends JLabel implements ListCellRenderer {
		private Font monFont;
 
		/** Procédure qui définit le nouveau Combobox */
		public ComboBoxRenderer() {
			setOpaque(true);
			setHorizontalAlignment(LEFT);
			setVerticalAlignment(TOP);
		}
 
		/** Fonction qui trouve l'image et le texte correspondant au choix */
public Component getListCellRendererComponent(JList list, Object value,	int index, boolean isSelected, boolean cellHasFocus) {
			int selectedIndex = ((Integer) value).intValue();
			if (isSelected) {
				setBackground(list.getSelectionBackground());
				setForeground(list.getSelectionForeground());
			} else {
				setBackground(list.getBackground());
				setForeground(list.getForeground());
			}
			ImageIcon icon = images[selectedIndex];
			String logo = logoStrings[selectedIndex];
			setIcon(icon);
			if (icon != null) {
				setText(logo);
				setFont(list.getFont());
			} else { setmonText(logo + " (no image available)", list.getFont()); }
			return this;
		}
 
		/** Fonction qui écrit le texte */
		protected void setmonText(String monText, Font normalFont) {
			if (monFont == null)
				monFont = normalFont.deriveFont(Font.ITALIC);
			setFont(monFont);
			setText(monText);
		}
	}
Enfin je précise que mon arborescence est la suivante :
-TPProjet2
- src
- fr
- uhp_nancy
- esstin
- outils
- WChoice (celle qui nous intéresse) et le dossier « images » contenant toutes mes images.

J’ai cru lire que des méthodes comme getDocumentBase() résoudrait mes problèmes sauf que je n’ai pas définie ma classe comme un Applet et donc cette méthode n’est pas reconnue… y a t’il une autre solution ?

Je vous remercie par avance pour votre aide,