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);
是一个整数值&您不能将其添加到JFrame中。实际上,您需要添加totalprice
JTextField totPrice
- 在方法
中,变量itemStateChanged(ItemEvent[]list)
未定义。实际上,您需要combo中所选项目的索引,以从x
数组中获取其价格。因此将pizzaPrice
替换为x
pizzaNum