2016-03-15 75 views
1

我想实施计算来跟踪液体摄入量。这应该从用户获得输入,执行计算并显示结果。Codename One:实现跟踪功能并执行计算

正如前面的文章中所建议的,我已经更新了我的代码(来自方法AddItem()),如下所示。

addItem.addComponent(selectItem); 
    TextField quantity = new TextField("", "Quantity (ml or g)", 4, TextArea.NUMERIC); 
    addItem.addComponent(quantity); 
    Button add = new Button("Add"); 
    addItem.addComponent(add);  
    TextArea results = new TextArea("Results"); 
    addItem.addComponent(results); 
    //TextArea total = new TextArea("Add Item"); 
    //addItem.addComponent(total); 

//-------------------------------------------------------------- 
    add.addActionListener((ActionEvent ev) -> { 
     Storage s = Storage.getInstance(); 
int total = 0; 
String num = quantity.getText(); 
Integer num2 = Integer.parseInt(num); 
total = total + num2; 
// Save the "Hello World" string to storage 
s.writeObject("volume", total); 
Container ctrResult = new Container(new GridLayout(1,3)); 
//Define a new container associated to a gridlayout with 1 row and 1 column 
ctrResult.addComponent(new Label("Volume")); 
ctrResult.addComponent(new Label(Integer.toString(total))); 
ctrResult.addComponent(new Label(Integer.toString(total/volume*100))); 
//Because you use a value inside a function, addItem should be initialized as final 
addItem.addComponent(ctrResult); 
    }); 
//-------------------------------------------------------------- 

    return addItem; 

此代码显示用户输入(来自用户的编号)。我想保存总数并在计算中使用它来更新正在保存的内容。另外,如果用户添加另一个数量,则会显示一个新行,但是我希望现有行得到更新。

此外,我想执行另一个计算来计算百分比,使用下面的变量(在另一个方法称为设置())。

TextField volume = new TextField("", "Volume (ml)", 4, TextArea.NUMERIC); 
    settings.addComponent(volume); 

计算结果为:total/volume * 100。

这两种方法都是公开的。

因此,我将不胜感激任何关于如何在我的代码中实现的帮助和指导。

回答

0

为了更新已显示在屏幕上的组件中的现有值,您需要引用该组件。所以你需要将指针存储在某个地方。

一旦你有一个Label的组件参考,你可以在其上调用setText()来根据你的逻辑将它的值设置为你想要的值。

您可以将组件参考存储在您的班级文件中,或在您的父级Form上使用putClientProperty。请注意,后一种方法更具挑战性。