[英]about ItemEvent in java GUI
我正在用Java GUI做一個小程序,這里是mu代碼:
// 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
{
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);
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);
itemStateChanged(this);
}
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[pizzaNum];
output = "Pizza Price $" + totalPrice;
totPrice.setText(output);
}
}
}
編譯器在第35行給我錯誤,它說itemStateChanged()應該接收一個類型為ItemEvent []的參數,但我正在傳遞“ this”(它本身是類)
誰能解釋itemStateChanged如何與JComboBox一起使用? 謝謝
您必須在組合框上添加偵聽器,而不是直接調用itemStateChanged
方法。 添加監聽器將在click事件發生時啟用回調,並且jvm將在為該事件注冊組合框時自動調用itemStateChanged
方法。 替換此行
itemStateChanged(this);
與
pizzaBox.addItemListener(this);
首先,您需要使用JFrame
實現ItemListener
。 與pizzaBox
添加以下行pizzaBox
,這將通知重寫的public void itemStateChanged(ItemEvent ev)
方法ItemListener
。
pizzaBox.addItemListener(this);
有關詳細信息,請參見本教程 。
問題:
1.您沒有為JComboBox
注冊itemListener
2. itemStateChanged
事件將ItemEvent
作為參數而不是ItemEvent[]
數組
1.替換這個:
itemStateChanged(this);
有了這個:
pizzaBox.addItemListener(this);
2.替換此:
public void itemStateChanged(ItemEvent[] list)
有了這個:
public void itemStateChanged(ItemEvent list)
完整的代碼:
// 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
{
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);
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);
pizzaBox.addItemListener(this);
}
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[pizzaNum];
output = "Pizza Price $" + totalPrice;
totPrice.setText(output);
}
}
}
下面this
即DebugFourteen3
不是一個類型ItemEvent
。 這就是為什么
itemStateChanged(ItemEvent[] list)
給出錯誤。
如果要處理itemStateChanged
則需要實現ItemLisntener
並將actionListner
添加為
pizzaBox.addItemListener(this);
還將ItemLisntener
Handler方法添加為
public void itemStateChanged(....)
{
//Handling Code goes here
}
或者,您也可以實現ActionListner
有關如何使用組合框的更多信息,請訪問此處
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.