2010-04-19 4 views
0

J'ai un petit problème. J'avais un JComboBox sur un JDialog mais ils ne s'afficheront pas ... De plus je peux les sélectionner (voir la photo).Invisible JComboBox

alt text http://grab.by/3RwI

Et voici mon code:

for(int i = 0; i<11; i++) 
    { 
     JComboBox jC = new JComboBox(posteList); 
     jC.setBounds(300, posY, 100, 20); 
     jC.setSelectedIndex(0); 
     this.add(jC); 
     posY += 30; 
    } 

Avez-vous une idée pour résoudre ce problème? Merci!

Répondre

2

Vous n'êtes pas censé appeler setBounds(), vous devez utiliser une mise en page pour gérer les positions des composants

+0

Hum oui mais je ne pense pas que ce soit l'origine de mon problème ... non? – Pierre

+0

La disposition de votre panneau appelle setBounds() après que vous avez fait et déplacer les composants. Vous devez utiliser une mise en page. – Guillaume

+0

Ok, je viens d'Apple dev et je n'utilise jamais de mise en page, c'est assez perturbé. Merci – Pierre

0

Appelez la méthode doLayout() de votre JComboBox après avoir réglé manuellement les limites. Ensuite, la zone de liste déroulante apparaîtra correctement. E.g .:

JPanel panel = new JPanel(); 
panel.setLayout(null); 

String[] items = {"hello","goodbye","etc"}; 
JComboBox cbox = new JComboBox(items); 
panel.add(cbox); 
cbox.setBounds(0, 0, 100, 20); 
cbox.doLayout(); // force the JComboBox internals to use your bounds 
0

J'ai trouvé une solution au problème. Si vous utilisez un JPanel pour le GlassPane, vous utilisez un JInternalFrame sur le panneau de verre. Si vous essayez de dessiner un JFileChooser ou JCombobox, parfois les popups ne roulent pas (je veux dire que ça roule mais roule sous le JPanel). Here est le rapport de bug d'Oracle: Lorsque mon collègue a trouvé ce rapport de bug, mes yeux brillaient. J'ai donc implémenté la solution du bugreport sur un JFrame, puis les popups ont bien fonctionné. Les étapes sont les suivantes:

  1. Vous devez d'abord créer un JFrame.
  2. Implémentez le correctif (hack) à partir du rapport de bug.
  3. Vous devez ajouter le JPanel (GlassPane) au JFrames rootPane, comme: frame.getRootPane().setGlassPane(panel);
  4. Lorsque vous ajoutez le JComboBox mis en place ceci: comboBox.setLightWeightPopupEnabled(true)

J'espère que ce sera la solution pour vos problèmes aussi. Cela a fonctionné pour moi.