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

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-12 20:41:05  来源:igfitidea点击:

JComboBox Item Listener Selected Item

javauser-interfacejcomboboxitemlistener

提问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:

因此,该行上只有两个变量:

  1. The ic1 array
  2. the localCombo variable
  1. ic1 数组
  2. 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 变量。