2017-04-07 4 views
-3

Dies könnte ein Duplikat von JComboBox popup menu not appearing sein, aber da es eine ziemlich alte Frage ist und seit einiger Zeit nicht aktiv war, plus alle Antworten waren keine Lösungen, das half mit meinem Problem. Also habe ich beschlossen, eine neue Frage zu stellen.JComboBox DropDown-Liste wird nicht angezeigt

Das Problem ist wie folgt: Ich habe eine Anwendung eines früheren Kollegen, die nicht mehr in meiner Firma funktioniert. Jetzt habe ich versucht, eine JComboBox zu einem JPanel hinzuzufügen. Die JCombobox wird wie erwartet angezeigt, verhält sich aber wie von Seth in seiner Frage beschrieben:

1) Der erste Klick auf die Schaltfläche zum Erweitern tut nichts. Der zweite Klick hebt den Inhalt der Box hervor, aber das Popup wird immer noch nicht angezeigt.

2) Sobald ich auf den Knopf geklickt habe und ihm den Fokus gegeben habe, durchlaufen Auf-/Abwärtstasten die Einträge korrekt.

Ich habe den Code auf das reduziert, was ich denke, ist das Minimum der benötigten Programmierung, um das Problem auftreten zu lassen. (Wie ein Kommentar in der genannten Frage erwähnt, um SSCCE bereitzustellen, was nie passiert ist).

Hier ist der Code, den ich zur Verfügung stellen kann:

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; 
} 
} 

Ich habe versucht, mit mehr Einheiten popoulating (wie von jluzwick vorgeschlagen), um zu sehen, wenn die DropDown einfach hinter etwas versteckt, aber nein.

Ich habe definitiv getRootPane() anstelle von getContentPane() verwendet, wie von Sehtim vermutet.

Es gibt auch JCombobox is not displayed, wobei die akzeptierte Antwort ist, setVisible (true) an das Ende des Konstruktors zu setzen. Ich habe das probiert und es hat in meinem Fall kein Verhalten verändert.

Die Frage, auf die ich eine Antwort brauche, ist: Wie mache ich die DropDown-Liste sichtbar, damit der Benutzer leicht einen Eintrag auswählen kann?

+2

Du wirst wollen Ihren Code beheben, weil sie gewonnen nicht kompilieren – MadProgrammer

Antwort

0

Dank MadProgrammer für den Hinweis auf den Code nicht kompilieren - Ich habe eine Lösung gefunden und wird es hier für jeden mit einem ähnlichen Problem bereitstellen.

Das Problem war ein Ergebnis der Mischung von schwerem Gewicht und leichten Komponenten (AWT/Swing).

Dies führte dazu, dass das leichte Popup verwendet wurde, das dann wahrscheinlich von anderen Komponenten okkludiert und somit nicht sichtbar war.

Die Lösung (wenn die Mischung aus schwerem und leichtem Gewicht bleiben soll) besteht darin, das leichte Popup zu deaktivieren, wodurch die Anwendung gezwungen wird, ein Backup-Popup zu verwenden. Dies wird durch replaceing die folgende Zeile getan:

dayList.setSelectedIndex(2); 

Mit dieser Zeile:

dayList.setLightWeightPopupEnabled (false); 

ich die Lösung hier: http://de.comp.lang.java.narkive.com/t2GPS9vy/jcombobox-poppt-nicht-auf