2013-02-25 65 views
0

請您檢查一下我的代碼有什麼問題。這是一個簡單的訂購系統,需要用戶輸入客戶名稱,收銀員姓名,用餐或取出口令和密碼。每次我在組合框中單擊一次吃飯雙打一頓,我選擇文本顯示兩次而不是一次

例如我點擊PM3它顯示:

你是爲了是/是:(豬肉燒烤4個) PM3
PM3(豬肉燒烤4個)

,但它應該是: 你是爲了是/是:(豬肉燒烤4個) PM3

順便說我有2個班,我會展示自己代碼如下。類展會的

代碼:

類ShowOrder的
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; 
} 
} 

代碼:正在爲這兩個選擇&取消選擇狀態改變執行兩次

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); 

} 
} 
+1

這個問題讓我很餓。 – vikingsteve 2013-02-25 11:08:43

+0

@vikingsteve好,然後吃先生。我只是想在這裏尋求幫助 – 2013-02-25 11:11:05

回答

2

用戶更改在組合框中選擇。因此,第一個ItemEent被觸發以告知先前選擇的項目已被取消選擇,並且第二個被觸發以說明新選擇的項目已被選擇。

我會使用ActionListener而不是ItemListener。

4

ItemListener代碼。你需要檢查你的聽衆狀態更改狀態:

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

或者乾脆使用ActionListener是你不希望檢查狀態變化。

請參見:How to Write an Item Listener

相關問題