简体   繁体   English

JComboBox项目侦听器选定项目

[英]JComboBox Item Listener Selected Item

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. 错误表明它位于.getSelectedItem()...行上。 It only gives me the error when I run the program and select a word in the box. 它只会在我运行程序并在框中选择一个单词时给出错误。 Thanks! 谢谢!

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$1.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$1.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.access$200(EventQueue.java:103)
    at java.awt.EventQueue$3.run(EventQueue.java:694)
    at java.awt.EventQueue$3.run(EventQueue.java:692)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
    at java.awt.EventQueue$4.run(EventQueue.java:708)
    at java.awt.EventQueue$4.run(EventQueue.java:706)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.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)

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();

The error says it is on the .getSelectedItem()... lines 错误表明它位于.getSelectedItem()...行上

So you only have two varaibles on that line: 所以你在这条线上只有两个变量:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM