打印错误的东西
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.任何想法?我很难过。打印错误的东西
使用此检索所选择的项目..
((JComboBox)event.getSource()).getSelectedItem();
编辑:应该是((JComboBox<Integer>)event.getSource()).getSelectedItem();
与您使用泛型。和“是”,这将进入你的事件方法。
编辑2:您收到警告,因为我们无法确定JComboBox是否应具有通用参数。编译器会提出此警告,因为它认为其不安全以进行此类投射。
@SuppressWarnings("unchecked")
((JComboBox<Integer>)event.getSource()).getSelectedItem();
System.out.println("Selected:" + ItemEvent.SELECTED);
这不是您在此处打印的选定元素,而只是一些内部事件类型代码(将其标记为选择事件)。这是一个常量由ItemEvent类定义的值。
尝试event.getItem()。这应该返回选定的项目。
System.out.println(event.getItem());是我从你的评论中得到的。但是,这会打印出除前一个之外我选择的新号码。所以它打印出两个数字。首先是前一个号码,后面是新号码。这是为什么? – Maydayfluffy 2012-03-14 06:47:39
您确定您不打印DESELECTED事件吗? – Thilo 2012-03-14 06:49:09
我不相信我。的System.out.println(event.getItem());是我在内在阶级ageListener中拥有的。 – Maydayfluffy 2012-03-14 06:50:18
ItemEvent.SELECTED是一个常量,表示表示“已选择项目”的标志。你需要使用一个ItemEvent对象的其他方法来提取你原来的组合框,找到选择的项目......
检查这里:http://docs.oracle.com/javase/1.4.2/docs/api/java/awt/event/ItemEvent.html#SELECTED
ItemEvent.SELECTED是恒定的,下面是ItemEvent的源的.java。
package java.awt.event;
public class ItemEvent extends AWTEvent {
......
/**
* This state-change value indicates that an item was selected.
*/
public static final int SELECTED = 1;
......
}
首先这将在事件方法中正确吗?当我这样做时,我得到一个错误:JComboBox是一个原始类型。参考通用类型JComboBox应参数化 –
Maydayfluffy
2012-03-14 06:43:09
@Maydayfluffy:请参阅上面的编辑... – 2012-03-14 07:01:17
现在((JComboBox)event.getSource())加下划线。错误:类型安全:未选中从对象转换为JComboBox中 –
Maydayfluffy
2012-03-14 07:07:56