首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JFrame和ItemListener问题

JFrame和ItemListener问题
EN

Stack Overflow用户
提问于 2015-03-17 10:25:44
回答 2查看 603关注 0票数 0

我找不到类的调试。

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

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

代码语言:javascript
复制
// 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);
      }
   }
}
EN

回答 2

Stack Overflow用户

发布于 2015-03-17 10:37:03

  • add(totalprice);int,无法将其添加到Container。使用JLabelJTextFieldJFormattedTextField instead
  • public void itemStateChanged(ItemEvent[] list) {不是符合ItemListener合同要求的有效签名。请参阅将遵守合同要求的要求方法签名的JavaDocs,它将处理至少另外两个未定义的errors
  • totalPrice = pizzaPrice[x];,变量(或者更多,它在Component中被定义为private变量,您可以引用它,我认为您需要pizzaNum

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

票数 0
EN

Stack Overflow用户

发布于 2015-03-18 14:26:54

以下是更正后的代码:

代码语言:javascript
复制
// 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的public void itemStateChanged(ItemEvent list)方法。您的类具有方法itemStateChanged(ItemEvent[] list),但此方法中的参数与接口方法不匹配。因此,修改后的此方法的argument.
  • add(totalprice); totalprice是一个整数值&您不能将其添加到JFrame。实际需要添加JTextField totPrice.
  • In方法itemStateChanged(ItemEvent[] list),变量x未定义。实际上,您需要从combo中选择项目的索引,才能从pizzaPrice数组中获取其价格。所以用pizzaNum.

替换了x

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29090298

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档