【问题标题】:Update JTextField with calculation from JComboBox使用来自 JComboBox 的计算更新 JTextField
【发布时间】:2013-04-13 01:32:17
【问题描述】:

在我的代码中,一旦有人单击任一组合框中的选项,我就会尝试在 JTextField 中发布 totalPrice 计算。我不想要名称,即“意大利辣香肠”,而是实际的总计算。现在我必须单击文本框并按 Enter 更新数据。

如何使用来自JComboBox 的计算更新JTextField

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

    }
 } 

【问题讨论】:

  • 欢迎来到 Stackoverflow!没有必要在你的问题标题中包含标签,标签是有原因的。请阅读meta.stackexchange.com/q/19190 进行一般性讨论。
  • 首先将动作监听器附加到组合框而不是文本字段
  • @MadProgrammer:他已经这样做了。
  • @HovercraftFullOfEels 不应该在手机上阅读代码:P
  • @MadProgrammer:不,绝对不是! :)

标签: java swing jtextfield jcombobox


【解决方案1】:

您通过限制 actionPerformed 对 if 测试的作用来故意限制您的代码:

if (source == calculate){

摆脱它,该方法将在任何时候调用 actionPerformed 时进行计算。在尝试计算之前,您最好确保两个组合框都有有效的选择。您可以通过获取组合框的选定索引并测试它们是否 >= 0(不是 -1)来测试它们。

【讨论】:

  • 好的,谢谢大家,我明白了。我刚刚为计算创建了一个方法,并为每个选择调用了它,它可以工作。
猜你喜欢
  • 2014-06-29
  • 1970-01-01
  • 2015-11-14
  • 1970-01-01
  • 2014-05-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-31
相关资源
最近更新 更多