2012-03-14 104 views
0
    for (int i = 1; i <= 100; ++i) { 
         ageList.add(i); 
        } 

        DefaultComboBoxModel<Integer> modelAge = new DefaultComboBoxModel<Integer>(); 
        for (Integer i : ageList) { 
         modelAge.addElement(i); 
        } 

        JComboBox<Integer> ageEntries = new JComboBox<Integer>(); 
        ageEntries.setModel(modelAge); 

        ageEntries.addItemListener(new ageListener()); 

    class ageListener implements ItemListener{ 
    public void itemStateChanged(ItemEvent event) { 
     if (event.getStateChange() == ItemEvent.SELECTED) { 
       System.out.println("Selected:" + ItemEvent.SELECTED); 
      } 

    } 
    } 

問題:當我選擇一個年齡時,無論我選擇的年齡如何,它都打印出1。例如,如果我選擇數字7,則打印出1.如果我選擇56,則打印出1.任何想法?我很難過。打印錯誤的東西

回答

4

使用此檢索所選擇的項目..

((JComboBox)event.getSource()).getSelectedItem(); 

編輯:應該是((JComboBox<Integer>)event.getSource()).getSelectedItem();與您使用泛型。和「是」,這將進入你的事件方法。

編輯2:您收到警告,因爲我們無法確定JComboBox是否應具有通用參數。編譯器會提出此警告,因爲它認爲其不安全以進行此類投射。

@SuppressWarnings("unchecked") 
((JComboBox<Integer>)event.getSource()).getSelectedItem(); 
+0

首先這將在事件方法中正確嗎?當我這樣做時,我得到一個錯誤:JComboBox是一個原始類型。參考通用類型JComboBox 應參數化 – Maydayfluffy 2012-03-14 06:43:09

+0

@Maydayfluffy:請參閱上面的編輯... – 2012-03-14 07:01:17

+0

現在((JComboBox )event.getSource())加下劃線。錯誤:類型安全:未選中從對象轉換爲JComboBox中 Maydayfluffy 2012-03-14 07:07:56

3

System.out.println("Selected:" + ItemEvent.SELECTED);

這不是您在此處打印的選定元素,而只是一些內部事件類型代碼(將其標記爲選擇事件)。這是一個常量由ItemEvent類定義的值。

嘗試event.getItem()。這應該返回選定的項目。

+0

System.out.println(event.getItem());是我從你的評論中得到的。但是,這會打印出除前一個之外我選擇的新號碼。所以它打印出兩個數字。首先是前一個號碼,後面是新號碼。這是爲什麼? – Maydayfluffy 2012-03-14 06:47:39

+0

您確定您不打印DESELECTED事件嗎? – Thilo 2012-03-14 06:49:09

+0

我不相信我。的System.out.println(event.getItem());是我在內在階級ageListener中擁有的。 – Maydayfluffy 2012-03-14 06:50:18

0

ItemEvent.SELECTED是一個常量,表示表示「已選擇項目」的標誌。你需要使用一個ItemEvent對象的其他方法來提取你原來的組合框,找到選擇的項目......