это может быть дубликатом не отображаемого всплывающего меню JComboBox , но поскольку это довольно старый вопрос и не был активен в течение достаточно долгого времени, плюс все ответы не были решениями, которые помогли с моей проблемой. Поэтому я решил создать новый вопрос.
Проблема в следующем: я получил заявку от предыдущей коллегии, которая больше не работает в моей компании. Теперь я попытался добавить JComboBox в JPanel. JCombobox отображается, как и ожидалось, но ведет себя так же, как описано Сетом в его вопросе:
1) Первый щелчок по кнопке расширения ничего не дает. Второй щелчок выделяет содержимое окна, но всплывающее окно все еще не появляется.
2) После того, как я нажал кнопку и перевел на нее фокус, нажатия клавиш вверх/вниз проходят по записям правильно.
Я разбил код на то, что, по моему мнению, является минимумом необходимого программирования, чтобы возникла проблема. (В одном из комментариев в упомянутом вопросе упоминалось о предоставлении SSCCE, чего никогда не было).
Теперь вот код, который я могу предоставить:
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;
}
}
Я попытался заполнить больше элементов (как это было предложено jluzwick), чтобы увидеть, скрыт ли раскрывающийся список просто за чем-либо, но нет.
Я определенно никогда не использовал getRootPane() вместо getContentPane(), как подозревал Сехтим.
Существует также JCombobox не отображается , где принятым ответом является установка setVisible(true) до конца конструктора. Я попробовал это, и это не изменило никакого поведения в моем случае.
Вопрос, на который мне нужен ответ, заключается в следующем: как сделать раскрывающийся список видимым, чтобы пользователь мог легко выбрать запись?