Java JFrame和ItemListener问题

Java JFrame和ItemListener问题,java,swing,jframe,components,itemlistener,Java,Swing,Jframe,Components,Itemlistener,我无法理解类的调试 正如评论所说,它需要让用户输入比萨配料,然后返回价格。它有代码,但我不知道从哪里开始调试 任何东西都会有帮助,即使你有一个工作代码,它也会有帮助。我想学,但确实需要帮助。因此,提前感谢您在正确的方向上提供的任何帮助/推动 // DebugFourteen3 // User selects pizza topping and sees price import javax.swing.*; import java.awt.*; import java.awt.event.*;

我无法理解类的调试

正如评论所说,它需要让用户输入比萨配料,然后返回价格。它有代码,但我不知道从哪里开始调试

任何东西都会有帮助,即使你有一个工作代码,它也会有帮助。我想学,但确实需要帮助。因此,提前感谢您在正确的方向上提供的任何帮助/推动

// DebugFourteen3
// User selects pizza topping and sees price
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

//use correct spelling of class name
public class DebugFourteen3 extends JFrame implements ItemListener
{
   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 DebugFourteen3()
   {
      super("Pizza List");
      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      setLayout(flow);
      pizzaBox.addItemListener(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(totalprice);
   }
   public static void main(String[] arguments)
   {
      JFrame frame = new DebugFourteen3();
      frame.setSize(200, 150);
      frame.setVisible(true);
   }

   public void itemStateChanged(ItemEvent[] list)
   {
      Object source = list.getSource();
      if(source == pizzaBox)
      {
         int pizzaNum = pizzaBox.getSelectedIndex();
         totalPrice = pizzaPrice[x];
         output = "Pizza Price $" + totalPrice;
         totPrice.setText(output);
      }
   }
}
  • add(总价)
    是一个
    int
    ,不能添加到
    容器中。改用
    JLabel
    JTextField
    JFormattedTextField
  • public void itemStateChanged(ItemEvent[]list){
    不是
    itemstener
    的合同要求的有效签名。请参阅,以获取满足合同要求的要求方法签名,该签名将处理至少两个其他错误
  • totalPrice=pizzaPrice[x];
    x
    未定义(或者更确切地说,它定义为
    Component
    中的
    private
    变量,您可以引用它,我想您需要
    pizzaNum

就个人而言,我认为您会发现使用
ActionListener
而不是
itemstener
更容易,因为您只关心所选项目的更改,而不关心从旧的所选项目到新的所选项目的更改

以下是更正的代码:

// DebugFourteen3
// User selects pizza topping and sees price
import java.awt.FlowLayout;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;

import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;

//use correct spelling of class name
public class DebugFourteen3 extends JFrame implements ItemListener {
    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 DebugFourteen3() {
        super("Pizza List");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLayout(flow);
        pizzaBox.addItemListener(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);
    }

    @Override
    public void itemStateChanged(ItemEvent list) {
        Object source = list.getSource();
        if (source == pizzaBox) {
            int pizzaNum = pizzaBox.getSelectedIndex();
            totalPrice = pizzaPrice[pizzaNum];
            output = "Pizza Price $" + totalPrice;
            totPrice.setText(output);
        }
    }
}
错误是:

  • 实现接口时,需要定义其所有方法或将该类标记为抽象类。在您的类中,缺少接口ItemListener的方法。您的类具有方法<代码>itemStateChanged(ItemEvent[]列表)但此方法中的参数与接口方法不匹配。因此修改了此方法的参数

  • add(totalprice);
    totalprice
    是一个整数值&您不能将其添加到JFrame中。实际上,您需要添加
    JTextField totPrice

  • 在方法
    itemStateChanged(ItemEvent[]list)
    中,变量
    x
    未定义。实际上,您需要combo中所选项目的索引,以从
    pizzaPrice
    数组中获取其价格。因此将
    x
    替换为
    pizzaNum


“我想学习它,但确实需要帮助。”你还需要一个(具体的)问题。你的问题是什么?确定你遇到的问题,并将注意力集中在类似的地方……我不知道如何修复我遇到的编译错误。我修复了除4个之外的所有问题,它们都在“公共类DebugFourteen3”部分,添加(totalPrice),它说它找不到'list.getSource()'的符号;'我特别相信列表部分,最后一个说在组件'pizzaPrice[x]中不公开“。这些都是我遇到的可见问题,很抱歉造成混淆。这些关键信息不应该出现在注释中,而应该出现在您的问题中。请通过在代码中明确显示错误发生的位置来澄清您的问题。此外,如果您的代码有多个编译器错误,则这表明您的代码风格ing可能需要修复。不要键入大量代码,然后对其进行测试。如果您不能使用诸如NetBeans或Eclipse之类的现代IDE(这几乎会立即警告您编译问题),请改为,则由您自己决定是否尽早并经常编译代码,最重要的是,在修复当前的编译问题之前,不要添加任何新代码。否则,您将面临大量难以修复的错误。