如何将3种不同方法返回的值相加?

时间:2014-08-22 16:20:36

标签: java swing methods sum return

我在JAVA中总结了3个不同的值时遇到了麻烦。 我使用Swing,有3种不同的组合框。对于每个组合框中的每个选定项,事件侦听器应返回不同的值。 E.G。:我有一个带有不同饮料的组合盒(每个都有价格),另一个有不同的食物(再次,每个都有价格)。 像这样的东西:

EDITED:对于每个组合框,我得到了一系列包含不同项目(食品和饮料)的字符串。

例如:

jCbeverages = new javax.swing.JComboBox();

jCbeverages.setModel(new javax.swing.DefaultComboBoxModel(new String[] {

    "Expresso- R$3.80",
    "Latte- R$6.80",
    "Cappuccino- R$6.80",

}));

jCbeverages.addActionListener(new java.awt.event.ActionListener() {
    public void actionPerformed(java.awt.event.ActionEvent evt) {
        jCbebidasActionPerformed(evt);
    }
});

getContentPane().add(jCbeverages);
jCbeverages.setBounds(40, 340, 300, 20);

以及上面的事件听众是这样的:

  public double jCbeveragesActionPerformed(java.awt.event.ActionEvent evt){                                          
     int beverage= jCbeverage.getSelectedIndex();
     double priceBev= 0;
     switch (beverage){
        case (0):
           priceBev=3.80;
           break;
        case (1):
           priceBev=4.60;
           break;
        case (2):
           priceBev=4.60;
           break;
     }
     return priceBev;
  }

食物也是如此

  public double jCfoodsActionPerformed(java.awt.event.ActionEvent evt) {                                           
     int food = jCfoods.getSelectedIndex();
     double priceFood=0;
     switch (food){
        case (0):
           priceFood=3.00;
           break;
        case (1):
           priceFood=4.00;
           break;
        case (2):
           priceFood=4.00;
           break;
     }
     return priceFood;  
  }

我需要显示总价格,即priceBev+priceFood

但是我已经尝试了很多东西而且我无法做到。我认为问题出在范围上,但我的所有方法都是public所以,我不认为问题出在那里。 **注意:**对不起,我输入了getItemCount(),但这是一个错误,我的代码错了。 getSelectedIndex(),就像你们中的一些人说的那样,是正确的。 有人能帮助我吗?

4 个答案:

答案 0 :(得分:2)

像@ortis和@mbw一样,你应该做那样的事情:

public class JavaApplication2 {

    private static JComboBox c1;
    private static JComboBox c2;
    private static JLabel sumLabel = new JLabel("0");

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
        final JFrame f = new JFrame("Sum Combobox");


        Food f1 = new Food("F1", 100);
        Food f2 = new Food("F2", 20);
        c1 = new JComboBox(new Food[] {f1, f2});

        Beverage b1 = new Beverage("B1", 30);
        Beverage b2 = new Beverage("B2", 90);
        c2 = new JComboBox(new Beverage[] {b1, b2});

        c1.addItemListener(new ItemListener() {

            @Override
            public void itemStateChanged(ItemEvent e) {
                sumLabel.setText(String.valueOf(calculateSum()));
                f.repaint();
            }
        });

        c2.addItemListener(new ItemListener() {

            @Override
            public void itemStateChanged(ItemEvent e) {
                sumLabel.setText(String.valueOf(calculateSum()));
                f.repaint();
            }
        });

        JPanel p = new JPanel();
        p.add(c1);
        p.add(c2);
        p.add(sumLabel);

        f.add(p);
        f.pack();
        f.setVisible(true);
    }

    static int calculateSum() {
        Food selectedFood = (Food) c1.getSelectedItem();
        Beverage selectedBeverage = (Beverage) c2.getSelectedItem();
        return selectedFood.price + selectedBeverage.price;
    }

    static class Food {
        String name;
        int price;

        Food(String name, int price) {
            this.name = name;
            this.price = price;
        }

        @Override
        public String toString() {
            return name;
        }
    }

    static class Beverage {
        String name;
        int price;

        Beverage(String name, int price) {
            this.name = name;
            this.price = price;
        }

        @Override
        public String toString() {
            return name;
        }
    }
}

enter image description here

答案 1 :(得分:0)

每次调用一个侦听器时,都应调用一个方法来检查每个ComboBox上的选择并返回所选项目的总价。

答案 2 :(得分:0)

你可以做两件事:

首先,您将使用JComboBox.getSelectedIndex(),而不是getItemCount()。

另一种可能性就是创建一个有两个变量的类 - 食品/饮料的名称和价格。您添加

public String toString() { }

该类的方法将返回食物/饮料的名称,以及常规的吸气剂和制定者。您可以使用这些对象填充组合框。当你最终调用getSelectedItem()时,因为你已经获得了价格已经存在的对象,你可以调用你的getPrice()方法,而不是用固定价格硬编码case语句 - 这通常是一个坏主意

答案 3 :(得分:0)

以下是Swings组合框的文档。 http://docs.oracle.com/javase/tutorial/uiswing/components/combobox.html。您确定在事件发生时,通过打印语句或任何其他方式触发您的方法吗?

如果你的方法不起作用,我会从ActionListener创建处理事件实现的类,然后创建一个ActionPerformed方法。您可以通过检查ActionPerformed中的源来决定该怎么做。

getItemCount()存在问题,看起来它将返回组合框所使用的数组中的元素数。您需要在组合框上调用getSelectedItem()来获取已检查的项目。

另一个潜在的问题是你的switch语句,它们没有任何默认值。如果为comboxbox设置初始值,则可能不会出现问题。

我也认为你不能从ActionPerformed方法返回一个值。我可能错了,但我几乎肯定,当你的事件发生时,系统会为你调用。这意味着没有变量来填充返回的价格。您总是可以使用全局变量。

总之,如果你按照上面的链接我认为“使用不可编辑的组合框”和“处理组合框上的事件”部分将是最有用的。