【发布时间】:2017-09-02 17:43:26
【问题描述】:
这可能是 JComboBox popup menu not appearing 的副本,但由于它是一个相当古老的问题并且在很长一段时间内都没有活跃,而且所有答案都不是解决方案,这有助于解决我的问题。因此我决定创建一个新问题。
问题如下: 我收到了以前的同事的申请,这在我的公司不再工作了。现在我尝试将 JComboBox 添加到 JPanel。 JCombobox 按预期显示,但其行为方式与 Seth 在他的问题中描述的方式相同:
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 建议的那样)以查看 DropDown 是否只是隐藏在任何东西后面,但没有。
我绝对没有使用 getRootPane() 代替 getContentPane(),正如 Sehtim 所怀疑的那样。
还有 JCombobox is not displayed ,其中接受的答案是将 setVisible(true) 设置为构造函数的末尾。我试过了,它并没有改变我的任何行为。
我需要回答的问题是:如何使下拉列表可见,以便用户轻松选择条目?
【问题讨论】:
-
你要修复你的代码,因为它不会编译