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); } }Merci de votre Aide
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); } }
Yutang
Partager