2017-04-07 4 views
-3

cela pourrait être un doublon de JComboBox popup menu not appearing, mais comme c'est une question plutôt ancienne et n'a pas été active depuis un certain temps, plus toutes les réponses n'étaient pas des solutions, cela m'a aidé avec mon problème. J'ai donc décidé de créer une nouvelle question.JComboBox DropDown liste n'est pas affichée

Le problème est le suivant: J'ai reçu une demande d'un ancien collègue qui ne fonctionne plus dans mon entreprise. Maintenant, j'ai essayé d'ajouter un JComboBox à un JPanel. Le JCombobox est affiché comme prévu, mais il se comporte de la même manière que décrit par Seth dans sa question:

1) Le premier clic sur le bouton d'expansion ne fait rien. Le deuxième clic met en évidence le contenu de la boîte, mais la fenêtre contextuelle n'apparaît toujours pas.

2) Une fois que j'ai cliqué sur le bouton et donné le focus, les touches haut/bas parcourent les entrées correctement.

J'ai décomposé le code à ce que je pense être le minimum de programmation nécessaire pour que le problème se produise. (Comme un commentaire dans la question mentionnée mentionné pour fournir SSCCE, ce qui n'a jamais eu lieu).

Maintenant, voici le code que je peux fournir:

public static class CreateProjectDialog extends JFrame { 

private Dimension size = Toolkit.getDefaultToolkit().getScreenSize(); 

public CreateProjectDialog() { 

    setDefaultCloseOperation(EXIT_ON_CLOSE); 
    int SZ_INCR = 1; 

    // Passe Fontgröße an Resolution an: 
    if (size.width > 1920) { 
     SZ_INCR = 2; 
    } 

    // Initialize Glass Layer 
    final JPanel panelGlass = (JPanel) getGlassPane(); 
    panelGlass.setLayout(null); 
    panelGlass.setVisible(true); 

    private static JPanel licBorrowPanel = null; 

    licBorrowPanel = new JPanel(); 
    licBorrowPanel.setBounds(0, 20, 1000, 500); 
    licBorrowPanel.setVisible(false); 
    licBorrowPanel.setBackground(Color.WHITE); 
    panelGlass.add(licBorrowPanel); 
} 

public static void main(String[] args) { 
    hauptFrame = new CreateProjectDialog(); 
} 

public static void licenceBorrowDialog() { 

    int mainWidth = hauptFrame.getSize().width; 
    int mainHeight = hauptFrame.getSize().height; 

    // pick a Date 
    JComboBox dayList = new JComboBox(); 
    DateFormat df = new SimpleDateFormat("dd/MM/yyyy"); 
    Calendar calToday = Calendar.getInstance(); 
    Date dayToday = calToday.getTime(); 
    int weekDay = calToday.get(Calendar.DAY_OF_WEEK); 
    String weekDayName = ""; 
    for (int i = 1; i <= 22; i++){ 
     dayToday.setDate(dayToday.getDate()+1); 
     weekDay = dayToday.getDay(); 
     weekDayName = translateWeekDay(weekDay); 
     dayList.addItem(i + " day(s) until " + weekDayName + " " + df.format(dayToday)); 
    } 
    dayList.setOpaque(true); 
    dayList.setSelectedIndex(2); 
    dayList.setBounds(mainWidth/2 - (125*SZ_INCR), (165*SZ_INCR), (250*SZ_INCR), (100*SZ_INCR)); 
    licBorrowPanel.add(dayList); 

    dayList.addActionListener(new ActionListener(){ 
     public void actionPerformed(ActionEvent e) { 
      int numberOfDays; 
      JComboBox dl = (JComboBox)e.getSource(); 
      numberOfDays = dl.getSelectedIndex()+1; 
      labelSelectedDate.setText("<HTML><BODY><b>Count of days: </b>" + numberOfDays + "</HTML></BODY>"); 
     } 
    }); 
} 

//Translate weekday int to name 
public static String translateWeekDay(int day){ 
    String retDay; 
    switch (day) { 
     case 0: retDay = "Monday"; 
      break; 
     case 1: retDay = "Truesday"; 
      break; 
     case 2: retDay = "Wednesday"; 
      break; 
     case 3: retDay = "Thursday"; 
      break; 
     case 4: retDay = "Friday"; 
      break; 
     case 5: retDay = "Saturday"; 
      break; 
     case 6: retDay = "Sunday"; 
      break; 
     default: retDay = "Invalid day"; 
      break; 
    } 
    return retDay; 
} 
} 

J'ai essayé popoulating avec plus d'articles (tel que proposé par jluzwick) pour voir si le menu déroulant est tout simplement caché derrière quoi que ce soit, mais non.

Je n'ai certainement jamais utilisé getRootPane() au lieu de getContentPane(), comme suspecté par Sehtim.

Il existe également JCombobox is not displayed, où la réponse acceptée est de définir setVisible (true) à la fin du constructeur. J'ai essayé ça et ça n'a pas changé de comportement dans mon cas.

La question à laquelle j'ai besoin d'une réponse est: Comment rendre la liste DropDown visible, pour permettre à l'utilisateur de choisir facilement une entrée?

+2

Tu vas veux corriger votre code, car il a gagné compile pas – MadProgrammer

Répondre

0

Merci MadProgrammer pour l'indice concernant le code ne pas compiler - J'ai trouvé une solution et le fournirai ici pour toute personne ayant un problème similaire.

Le problème résultait du mélange de composants lourds et légers (awt/swing). Cela a abouti à l'utilisation de la fenêtre de poids léger, qui était alors probablement obstruée par d'autres composants et donc non visible.

La solution (si le mélange des deux poids lourds et léger doit rester) est de désactiver le popup de poids léger forçant l'application à utiliser une fenêtre de sauvegarde. Cela se fait par replaceing la ligne suivante:

dayList.setSelectedIndex(2); 

Avec cette ligne:

dayList.setLightWeightPopupEnabled (false); 

J'ai trouvé la solution ici: http://de.comp.lang.java.narkive.com/t2GPS9vy/jcombobox-poppt-nicht-auf