0

以下のコードの何が問題なのかを確認してください。お客様のお名前、レジ名、イートインかテイクアウトか、パスワードを入力するだけの簡単注文システムです。コンボ ボックスで食事を 1 回クリックするたびに、選択した食事が 2 倍になります

たとえば、PM3 をクリックすると、次のように表示されます。

ご注文はPM3(豚バラ4貫)
PM3(豚バラ4貫)

ご注文内容: PM3 (ポーク バーベキュー 4 ピース)

ちなみに、私は2つのクラスを持っています。以下にコードを示します。

クラスのコード表示:

import java.util.Scanner;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

 public class Show{

  private static String z  = "";
  private static String w  = "";
  private static String x  = "";
  JComboBox combo;
  private static String a  = "";

 public Show(){
 String mgaPagkainTo[] = {"PM1 (Paa/ Spicy Paa with Thigh part)","PM2 (Pecho)","PM3 (Pork Barbeque 4 pcs.)","PM4 (Bangus Sisig)","PM5 (Pork Sisig)","PM6 (Bangus Inihaw)","SM1 (Paa)","SM2 (Pork Barbeque 2 pcs.)","Pancit Bihon","Dinuguan at Puto","Puto","Ensaladang Talong","Softdrinks","Iced Tea","Halo-Halo","Leche Flan","Truon Split"};
 JFrame frame = new JFrame("Mang Inasal Ordering System");
 JPanel panel = new JPanel();
 combo = new JComboBox(mgaPagkainTo);
 combo.setBackground(Color.gray);
 combo.setForeground(Color.red);
 panel.add(combo);
 frame.add(panel);
    combo.addItemListener(new ItemListener(){
    public void itemStateChanged(ItemEvent ie){
        String str = (String)combo.getSelectedItem();
        a = str;
        ShowOrder messageOrder1 = new ShowOrder();
        messageOrder1.ShowOrderPo();
       }
    });

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(300,250);
    frame.setVisible(true);
  }

   public static void main(String[] args) {
   Scanner inp = new Scanner(System.in);
   boolean ulitinMoPows = true;
   boolean tryAgain = true;

    System.out.print("\nInput Customer Name: ");
    String customerName = inp.nextLine();
    w = customerName;
    System.out.print("\nInput Cashier Name: ");
    String user = inp.nextLine();
    z = user;
  do{
    System.out.print("\nInput either Dine In or Take Out: ");
    String dInDOut = inp.nextLine();
    x = dInDOut;
        if (x.equals("Dine In") || x.equals("Take Out")){
         System.out.print("");
         ulitinMoPows = false;
         }
        else{
         JOptionPane.showMessageDialog(null, "Try again! Please input Dine In or Take Out only!","Error", JOptionPane.ERROR_MESSAGE);
             ulitinMoPows = true;
             System.out.print ("\f");
            }
 }while(ulitinMoPows);
 do{
    System.out.print("\nInput password: ");
    String pass = inp.nextLine();
    if(pass.equals("admin")){
        ShowOrder messageShowMenu = new ShowOrder();
        messageShowMenu.ShowMenu();
        tryAgain = false;
    }
    if(!pass.equals("admin")){
        JOptionPane.showMessageDialog(null, "Try again! Invalid password!","Error Logging-In", JOptionPane.ERROR_MESSAGE);
    tryAgain = true;
     System.out.print ("\f");
    }
}while(tryAgain);
Show j = new Show();
    }

  public static String kuhaOrder()
{
  return a;
}

public static String kuhaUserName()
{
return z;
}

public static String kuhaCustomerName()
{
return w;
}

public static String kuhaSanKainPagkain()
{
return x;
}  
}

クラス ShowOrder のコード:

public class ShowOrder {

public void ShowMenu(){
    String user = Show.kuhaUserName();
    System.out.print("\n\n\t\tCashier: " +user);
    String dInDOut = Show.kuhaSanKainPagkain();
    System.out.print("                          "+dInDOut);
    String customerName = Show.kuhaCustomerName();
    System.out.print("\n\t\tCustomer Name: " +customerName);
    System.out.print("\t\t\t\n\nYour order is/ are: ");
}


public void ShowOrderPo() {
    String order = Show.kuhaOrder();
    System.out.print("\t\t\t\t\n " +order);

}
}
4

2 に答える 2

4

コードItemListenerは、選択された状態と選択されていない状態の両方の変更に対して2回実行されています。リスナーで状態変更ステータスを確認する必要があります。

if (ie.getStateChange() == ItemEvent.SELECTED) {
  ...

または、単にActionListeneris を使用して、状態の変化を確認したくありません。

参照:項目リスナーの作成方法

于 2013-02-25T11:12:06.607 に答える
2

ユーザーがコンボ ボックスの選択を変更します。したがって、最初の ItemEent は、以前に選択されたアイテムが選択解除されたことを伝えるために起動され、2 つ目のアイテムは、新しく選択されたアイテムが選択されたことを伝えるために起動されます。

ItemListener の代わりに ActionListener を使用します。

于 2013-02-25T11:12:30.933 に答える