2012-03-14 106 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对象的其他方法来提取你原来的组合框,找到选择的项目......