Bonjour,

Je me tourne vers la communauté informatique car j'ai un problème d'affichage des images d'une comboBox renderer dans un InternalFrame.

Lorsque je click sur le comboxBox la liste des informations ne s'affiche que lorsque le comboBox se situe à une distance inférieur ou égal à la longueur de la liste !?

Je pense que le problème se situe sur le repaint de la fenêtre !!

J'ai joint le code afin que vous puissiez reproduire le problème.

NB : il n'y a pas de problème avec un JFrame

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
 
import java.awt.GridLayout;
import java.awt.ScrollPane;
 
import javax.swing.ImageIcon;
import javax.swing.JComboBox;
import javax.swing.JDesktopPane;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;
import javax.swing.JPanel;
 
 
import design.pattern.surcharger.ComboBoxRenderer;
import enums.Images;
 
public class ComboBoxAdapterExample {
    public ComboBoxAdapterExample() {
    }
 
    public static void main(String[] a){
        // ComboBox + renderer
        //ImageIcon[] imagesComboBox = {(ImageIcon) Images.Add.getIcon(27,27),
   	//		                          (ImageIcon) Images.Examen.getIcon(27,27)};
 
        ImageIcon[] imagesComboBox = {new ImageIcon(),
                                                          new ImageIcon()};
 
        Integer[] intArray = new Integer[imagesComboBox.length];
        for (int i = 0; i < imagesComboBox.length; i++) {
            intArray[i] = new Integer(i);
        }
 
        JComboBox jComboBoxRenderer = new JComboBox(intArray);
        ComboBoxRenderer renderer= new ComboBoxRenderer(imagesComboBox);
        jComboBoxRenderer.setRenderer(renderer);
        jComboBoxRenderer.setMaximumRowCount(5);        
 
        // jGoodies
        /*JPanel panel = new JPanel(new FormLayout("default", "default"));
        CellConstraints cc = new CellConstraints();
        panel.add(jComboBoxRenderer, cc.xy(1, 1));*/
 
        JPanel panel = new JPanel(new GridLayout(1, 1));
        panel.add(jComboBoxRenderer, 0);
 
        //JInternalFrame
    	JInternalFrame jInternalFrame = new JInternalFrame();
    	jInternalFrame.setBounds(0, 0, 100, 100);
    	jInternalFrame.add(panel);
    	jInternalFrame.setVisible(true);
 
    	// DeskTop
    	JDesktopPane desktop = new JDesktopPane();
    	desktop.add(jInternalFrame);
    	ScrollPane scrollPane = new ScrollPane();
	    scrollPane.add(desktop);
 
    	//Frame
	    JFrame f = new JFrame("DeskTop + InternalFrame + Goodies");
        f.add(scrollPane);
        f.pack();
        f.setBounds(0, 0, 500, 500);
        f.setVisible(true);
    }
}
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
 
import java.awt.Component;
import java.awt.Font;
 
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.ListCellRenderer;
 
public class ComboBoxRenderer extends JLabel
                           implements ListCellRenderer {
        private Font uhOhFont;
        private ImageIcon[] images;
 
        public ComboBoxRenderer(ImageIcon[] images) {
            setOpaque(true);
            setHorizontalAlignment(CENTER);
            setVerticalAlignment(CENTER);
            this.images = images;
        }
 
        public Component getListCellRendererComponent(
                                           JList list,
                                           Object value,
                                           int index,
                                           boolean isSelected,
                                           boolean cellHasFocus) {
            //Get the selected index. (The index param isn't
            //always valid, so just use the value.)
            int selectedIndex = ((Integer)value).intValue();
 
            if (isSelected) {
                setBackground(list.getSelectionBackground());
                setForeground(list.getSelectionForeground());
            } else {
                setBackground(list.getBackground());
                setForeground(list.getForeground());
            }
 
            //Set the icon and text.  If icon was null, say so.
            ImageIcon icon = images[selectedIndex];
            setIcon(icon);
 
 
            return this;
        }
 
        //Set the font and text when no image was found.
        protected void setUhOhText(String uhOhText, Font normalFont) {
            if (uhOhFont == null) { //lazily create this font
                uhOhFont = normalFont.deriveFont(Font.ITALIC);
            }
            setFont(uhOhFont);
            setText(uhOhText);
        }
    }
Merci de votre Aide

Yutang