簡體   English   中英

關於Java GUI中的ItemEvent

[英]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);
      }
   }
}

下面thisDebugFourteen3不是一個類型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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM