2013-04-13 48 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:很高兴你有它的工作。 –