Java JComboBox 项目侦听器选定项目
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/19849962/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
JComboBox Item Listener Selected Item
提问by Dando18
I am creating a combo box and it keeps giving me an error with the item listener that I don't understand. If you could also explain your answer that would be nice. Thanks in advance:
我正在创建一个组合框,它不断给我一个我不理解的项目侦听器的错误。如果您还可以解释您的答案,那就太好了。提前致谢:
Here's the item listeners for the combo boxes:
这是组合框的项目侦听器:
combo1.addItemListener(new ItemListener(){
@Override
public void itemStateChanged(ItemEvent e){
if(e.getStateChange() == ItemEvent.SELECTED){
JComboBox localCombo = (JComboBox)e.getSource();
ic1[0] = localCombo.getSelectedItem().toString();
}
}
});
combo2.addItemListener(new ItemListener(){
@Override
public void itemStateChanged(ItemEvent e){
if(e.getStateChange() == ItemEvent.SELECTED){
JComboBox localCombo = (JComboBox)e.getSource();
ic1[1] = localCombo.getSelectedItem().toString();
}
}
});
The error says it is on the .getSelectedItem()... lines. It only gives me the error when I run the program and select a word in the box. Thanks!
错误说它在 .getSelectedItem()... 行上。当我运行程序并在框中选择一个单词时,它只会给我错误。谢谢!
Here's the error in the run (line 61 is the .getSelectedItem()... line):
这是运行中的错误(第 61 行是 .getSelectedItem()... 行):
run:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at thisprogramisforfun.guiClasses.guiClassConversions.itemStateChanged(guiClassConversions.java:61)
at javax.swing.JComboBox.fireItemStateChanged(JComboBox.java:1225)
at javax.swing.JComboBox.selectedItemChanged(JComboBox.java:1282)
at javax.swing.JComboBox.contentsChanged(JComboBox.java:1329)
at javax.swing.AbstractListModel.fireContentsChanged(AbstractListModel.java:118)
at javax.swing.DefaultComboBoxModel.setSelectedItem(DefaultComboBoxModel.java:93)
at javax.swing.JComboBox.setSelectedItem(JComboBox.java:578)
at javax.swing.JComboBox.setSelectedIndex(JComboBox.java:624)
at javax.swing.plaf.basic.BasicComboPopup$Handler.mouseReleased(BasicComboPopup.java:835)
at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:290)
at java.awt.Component.processMouseEvent(Component.java:6505)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3320)
at javax.swing.plaf.basic.BasicComboPopup.processMouseEvent(BasicComboPopup.java:499)
at java.awt.Component.processEvent(Component.java:6270)
at java.awt.Container.processEvent(Container.java:2229)
at java.awt.Component.dispatchEventImpl(Component.java:4861)
at java.awt.Container.dispatchEventImpl(Container.java:2287)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
at java.awt.Container.dispatchEventImpl(Container.java:2273)
at java.awt.Window.dispatchEventImpl(Window.java:2719)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:735)
at java.awt.EventQueue.access0(EventQueue.java:103)
at java.awt.EventQueue.run(EventQueue.java:694)
at java.awt.EventQueue.run(EventQueue.java:692)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.security.ProtectionDomain.doIntersectionPrivilege(ProtectionDomain.java:87)
at java.awt.EventQueue.run(EventQueue.java:708)
at java.awt.EventQueue.run(EventQueue.java:706)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:705)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)
回答by Hovercraft Full Of Eels
Your problem is here:
你的问题在这里:
combo1 = (JComboBox)e.getSource();
ic1[0] = combo2.getSelectedItem().toString();
You're getting combo1 but calling a method on combo2
你得到了combo1,但在combo2上调用了一个方法
Better would be this:
最好是这样:
combo1 = (JComboBox)e.getSource();
ic1[0] = combo1.getSelectedItem().toString();
But even better, use a local variable for this sort of work, not a field.
但更好的是,对此类工作使用局部变量,而不是字段。
JComboBox localCombo = (JComboBox)e.getSource();
ic1[0] = localCombo.getSelectedItem().toString();
回答by camickr
The error says it is on the .getSelectedItem()... lines
错误说它在 .getSelectedItem()... 行上
So you only have two varaibles on that line:
因此,该行上只有两个变量:
- The ic1 array
- the localCombo variable
- ic1 数组
- localCombo 变量
Do you know how to use System.out.println(...) to display the value of those variables?
你知道如何使用 System.out.println(...) 来显示这些变量的值吗?
My guess in the ici array is not initialized, since you get the localCombo variable from the event source.
我在 ici 数组中的猜测未初始化,因为您从事件源获取 localCombo 变量。