2017-04-07 44 views
-3

這可能是JComboBox popup menu not appearing重複,但因爲它是一個相當古老的問題,而不是已經活躍了相當長的一段時間,加上所有的答案都沒有解決方案,這與我的問題有幫助。因此我決定創建一個新問題。JComboBox的下拉列表

的問題如下: 我得到了一個前colleque,這並不在我的公司工作了的應用。現在我嘗試將JComboBox添加到JPanel。 JCombobox按預期方式顯示,但其行爲與Seth在其問題中描述的相同:

1)第一次單擊展開按鈕時什麼也不做。第二次點擊突出顯示框的內容,但彈出窗口仍然不顯示。

2)一旦我點擊了按鈕,並給它的焦點,上/下擊鍵循環正確的條目。

我已經將代碼分解到我認爲是所需編程的最小程度,以便發生問題。 (正如上面提到的提供SSCCE的問題中的一個評論,這從未發生過)。

現在,這裏是我的代碼可以提供:我試着用更多的項目popoulating(提議jluzwick)看到

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

,如果下拉簡直是背後隱藏的東西,但是沒有。

正如Sehtim懷疑的那樣,我絕對沒有使用getRootPane()代替getContentPane()。

還有JCombobox is not displayed,在那裏接受的答案是將調用setVisible(真)設置爲構造函數的結束。我試過了,並沒有改變我的情況。

的問題,我需要一個答案,就是:如何讓我的下拉列表中可見,使用戶可以輕鬆地選擇一個條目?

+2

你會想解決您的代碼,因爲它贏得不會編譯 – MadProgrammer

回答

0

感謝MadProgrammer的關於不編譯代碼的提示 - 我找到了解決辦法,並會在這裏提供它具有類似問題的人。

這個問題是混合重量和重量輕的組件(awt/swing)的結果。

這導致輕量級的彈出窗口被使用,然後可能被其他組件遮擋,因此不可見。

解決方案(如重型和輕型的混合已經留)是禁用重量輕彈出強制使用備份彈出窗口中的應用程序。

dayList.setSelectedIndex(2); 

這一行:這是由保換以下行來完成

dayList.setLightWeightPopupEnabled (false); 

我發現這裏的解決方案: http://de.comp.lang.java.narkive.com/t2GPS9vy/jcombobox-poppt-nicht-auf