Probleme d'affichage d'une comboBox renderer dans un InternalFrame
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 !! :cfou:
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:
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:
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