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?
Du wirst wollen Ihren Code beheben, weil sie gewonnen nicht kompilieren – MadProgrammer