2013-04-13 49 views
0

在我的代碼中,我試圖在JTextField總後價格計算一有人點擊任何一個組合框的選項。我不想要名稱,即「辣香腸」,但實際的總計算。現在我必須點擊文本框並按回車來更新數據。更新JTextField與從JComboBox計算

如何更新JTextFieldJComboBox的計算?

import java.awt.* ; 

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

class JPizza extends JFrame implements ActionListener 
{ 
    private static final long serialVersionUID = 1L; 

    public static void main(String[] args) 
     { 
      JPizza myFrame = new JPizza(); 
      myFrame.setVisible(true); 
     } 

    private static final int WIDTH = 250; 
    private static final int HEIGHT = 300; 
    private static final int X_ORIGIN = 200; 
    private static final int Y_ORIGIN = 100; 

     private static final double smallPizzaPrice = 7.00; 
     private static final double mediumPizzaPrice = 9.00; 
     private static final double largePizzaPrice = 11.00; 
     private static final double extraLargePizzaPrice = 14.00; 
     private static final int smallPizzaSize = 0; 
     private static final int mediumPizzaSize = 1; 
     private static final int largePizzaSize = 2; 
     private static final int extraLargeSize = 3; 

     private static final double cheese = 0.0, pepperoni = 1.00, peppers = 1.00, sausage = 1.00, olives = 1.00; 
     private static final int cheesePlace = 0, pepperoniPlace = 1, peppersPlace = 2, sausagePlace = 3, olivesPlace = 4; 

     int states = 0 ; 
     double totalPrice = 0.0; 
     double pizzaSizePrice = smallPizzaPrice ; 
     double toppingPrice = 0.0; 

    //Toppings & Panel 
    JComboBox<String> pizzaTopping; 
    JPanel comboboxPanel2; 

    //Pizza Size & Panel 
    JComboBox<String> pizzaSize; 
    JPanel comboboxPanel; 

    //Price Display Field and Panel 
    JTextField calculate; 
    JPanel messagePanel; 

    public JPizza() 
    { 
     super("Tower of Pizza");  

     JLabel title = new JLabel("Tower of Pizza"); 
     add(title); 

     pizzaSize = new JComboBox<String>(); 
     pizzaSize.addItem("Small"); 
     pizzaSize.addItem("Medium"); 
     pizzaSize.addItem("Large"); 
     pizzaSize.addItem("Extra Large"); 
     pizzaSize.setSelectedIndex(0); 
     pizzaSize.addActionListener(this); 

     pizzaTopping = new JComboBox<String>(); 
     pizzaTopping.addItem("Cheese"); 
     pizzaTopping.addItem("Pepperoni"); 
     pizzaTopping.addItem("Peppers"); 
     pizzaTopping.addItem("Sausage"); 
     pizzaTopping.addItem("Olives"); 
     pizzaTopping.setSelectedIndex(0); 
     pizzaTopping.addActionListener(this); 

     calculate = new JTextField(10); 
     calculate.addActionListener(this); 

     Container contentPane = getContentPane(); 
     GridLayout contentpaneLayout = new GridLayout(5,0,10,10); 
     contentPane.setLayout(contentpaneLayout); 

     comboboxPanel = new JPanel(); 
     GridLayout comboboxPanelLayout = new GridLayout(2,0); 
     comboboxPanel.setLayout(comboboxPanelLayout); 
     comboboxPanel.add(pizzaSize); 
     contentPane.add(comboboxPanel); 

     comboboxPanel2 = new JPanel(); 
     GridLayout comboboxPanelLayout1 = new GridLayout(2,0); 
     comboboxPanel2.setLayout(comboboxPanelLayout1); 
     comboboxPanel2.add(pizzaTopping); 
     contentPane.add(comboboxPanel2); 

     messagePanel = new JPanel(); 
     GridLayout messagePanelLayout = new GridLayout(2,0); 
     messagePanel.setLayout(messagePanelLayout); 
     messagePanel.add(calculate); 
     contentPane.add(messagePanel); 

     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setBounds(X_ORIGIN, Y_ORIGIN, WIDTH, HEIGHT); 
     setResizable(false); 
    } 


    public void actionPerformed(ActionEvent e) 
    {    
     Object source = e.getSource(); 

       int pizzaSiz = (int)pizzaSize.getSelectedIndex(); 

       if (source == calculate){ 

       if (pizzaSiz == smallPizzaSize){     
        pizzaSizePrice = smallPizzaPrice;     
        } 
       else if (pizzaSiz == mediumPizzaSize){ 
         pizzaSizePrice = mediumPizzaPrice ; 

        } 
       else if (pizzaSiz == largePizzaSize){ 
         pizzaSizePrice = largePizzaPrice; 
        } 
       else if (pizzaSiz == extraLargeSize){ 
        pizzaSizePrice = extraLargePizzaPrice; 
        } 

       int pizzaTop = (int)pizzaTopping.getSelectedIndex(); 

       if(pizzaTop == cheesePlace){ 
        toppingPrice = cheese; 
       } 
       else if(pizzaTop == pepperoniPlace){ 
        toppingPrice = pepperoni; 
       } 
       else if(pizzaTop == peppersPlace){ 
        toppingPrice = peppers; 
       } 
       else if(pizzaTop == sausagePlace){ 
        toppingPrice = sausage; 
       } 
       else if(pizzaTop == olivesPlace){ 
        toppingPrice = olives;  
       } 

       totalPrice = pizzaSizePrice; 
       totalPrice +=toppingPrice; 
       calculate.setText("Total Price: $" + totalPrice);    
      } 

    } 
} 
+0

歡迎來到Stackoverflow!沒有必要在標題中加入標籤,有標籤是有原因的。有關一般性討論,請閱讀http://meta.stackexchange.com/q/19190。 – Patrick

+0

首先將動作偵聽器附加到組合框而不是文本框 – MadProgrammer

+0

@MadProgrammer:他已經這樣做了。 –

回答

2

你是故意通過限制什麼的actionPerformed確實與測試,如果限制你的代碼:

if (source == calculate){ 

擺脫它和方法做計算的任何時間的actionPerformed被調用。您最好確保在試圖計算前兩個組合框都有有效的選擇。您可以通過獲取組合框的選定索引並測試它們是否大於等於0(而不是-1)來測試它們。

+0

好的,謝謝你們,我明白了。我只是做了一個計算方法,併爲每個選擇調用它,它的工作原理。 –

+0

@JoeSmith:很高興你有它的工作。 –