Java 项目侦听器错误

Java 项目侦听器错误,java,swing,jcombobox,itemlistener,Java,Swing,Jcombobox,Itemlistener,我对项目侦听器有问题。这是我第一次使用它,到目前为止,我只使用了项目事件。我想知道你是否能澄清这两者之间的区别,并指出我做错了什么 我的问题出现在第46行,第一行是:Object source=toppingList.getSource();我得到的错误是“找不到符号” 我想我在getSource()之前使用了错误的项,我认为排行榜是正确的项目,我看不出还有其他项目可以放在它的位置上 import javax.swing.*; import java.awt.*; import java.awt

我对
项目侦听器有问题。这是我第一次使用它,到目前为止,我只使用了
项目事件
。我想知道你是否能澄清这两者之间的区别,并指出我做错了什么

我的问题出现在第46行,第一行是:Object source=toppingList.getSource();我得到的错误是“找不到符号”

我想我在
getSource()之前使用了错误的项
,我认为
排行榜
是正确的项目,我看不出还有其他项目可以放在它的位置上

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;


public class Pizza extends JFrame{

  FlowLayout flow = new FlowLayout();
  JComboBox pizzaBox = new JComboBox();
  JLabel toppingList = new JLabel("Topping List");
  JLabel aLabel = new JLabel("Paulos's American Pie");
  JTextField totPrice = new JTextField(10);
  int[] pizzaPrice = {7,10,10,8,8,8,8};
  int totalPrice = 0;
  String output;
  int pizzaNum;

  public Pizza()
  {
    super("Pizza List");
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setLayout(flow);
    pizzaBox.addItemListener((ItemListener) this);
    add(toppingList);
    pizzaBox.addItem("cheese");
    pizzaBox.addItem("sausage");
    pizzaBox.addItem("pepperoni");
    pizzaBox.addItem("onion");
    pizzaBox.addItem("green pepper");
    pizzaBox.addItem("green olive");
    pizzaBox.addItem("black olive");
    add(pizzaBox);
    add(aLabel);
    add(totPrice);
  }

  public static void main(String[] arguments)
  {
    JFrame frame = new DebugFourteen3();
    frame.setSize(200, 150);
    frame.setVisible(true);
  }


 public void itemStateChanged(ItemEvent[] list)
 {

   Object source = toppingList.getSource();
   if(source == pizzaBox)
   {
     int pizzaNum = pizzaBox.getSelectedIndex();
     totalPrice = pizzaPrice[pizzaNum];
     output = "Pizza Price $" + totalPrice;
     totPrice.setText(output);
   }
  }
 }

您需要使用类实现
itemstener
。有关详细信息,请参阅此


Gui元素没有任何
getSource
,它是一种事件的方法—告诉您是哪个Gui元素生成了事件。但是您知道事件的来源是什么,因为在构造函数中您编写了:

pizzaBox.addItemListener((ItemListener) this);
您没有将此添加到任何其他gui元素。因此,您无法从任何其他gui元素获取事件。所以不要测试它

但还有其他问题:

您的
PizzaBox
应该实现
itemstener

public class Pizza extends JFrame implement ItemListener 
然后写下来

pizzaBox.addItemListener(this);
如果要侦听多个元素,请为每个元素添加单独的匿名侦听器(Pizza不实现ItemListener)

或者,您可以将代码移动到单独的方法

public class Pizza extends JFrame {

    public Pizza() {
        :
        pizzaBox.addItemListener(new ItemListener() { 
            public void itemStateChanged(ItemEvent e) {
                 pizzaBox_itemStateChanged(e);
            }
        });
        :
    }

    private void pizzaBox_itemStateChanged(ItemEvent e) {
        if (e.getStateChange() == ItemEvent.SELECTED) {
           pizzaNum = pizzaBox.getSelectedIndex();
           // and so on
        }
    }

    :
}

我们不知道第46行是什么。非常感谢马苏德,显然我把事情弄得有点复杂。感谢您指出我做错了什么以及教程链接。:)感谢您对Jirka-x1的澄清。知道有两种不同的方式处理事情是非常有帮助的,我感谢你在这方面的帮助。所以再次感谢你。:)很高兴听到这有帮助。那么也许你可以给它投一票?:)(您可以对多个问题进行投票)
// in your constructor:
pizzaBox.addItemListener(new ItemListener() { 
    public void itemStateChanged(ItemEvent e) {
       if (e.getStateChange() == ItemEvent.SELECTED) {
           pizzaNum = pizzaBox.getSelectedIndex(); // in your code you have int pizzaNum but at the same time, pizzaNum is a class variable, probably an error
           // and so on
       } 
    }
});
public class Pizza extends JFrame {

    public Pizza() {
        :
        pizzaBox.addItemListener(new ItemListener() { 
            public void itemStateChanged(ItemEvent e) {
                 pizzaBox_itemStateChanged(e);
            }
        });
        :
    }

    private void pizzaBox_itemStateChanged(ItemEvent e) {
        if (e.getStateChange() == ItemEvent.SELECTED) {
           pizzaNum = pizzaBox.getSelectedIndex();
           // and so on
        }
    }

    :
}