Gwt ValueChangeHandler和计算动态总值

Gwt ValueChangeHandler和计算动态总值,gwt,gwt2,Gwt,Gwt2,我有一个全局值和一个标签小部件 int-total=0; 标签lblTotal=新标签(“+”总计) 我有100个或更多的文本框小部件 文本框t1=新文本框(“0”); 文本框t2=新文本框(“0”); 文本框t3=新文本框(“0”); 并且在每个文本框上都有ValueChangeHandler t1.addValueChangeHandler(new ValueChangeHandler<String>() { public void onValueCh

我有一个全局值和一个标签小部件

int-total=0;
标签lblTotal=新标签(“+”总计)

我有100个或更多的文本框小部件

文本框t1=新文本框(“0”);
文本框t2=新文本框(“0”);
文本框t3=新文本框(“0”);

并且在每个文本框上都有ValueChangeHandler

    t1.addValueChangeHandler(new ValueChangeHandler<String>() {

        public void onValueChange(final ValueChangeEvent<String> event) {
            calculateAndSetTotal(t1);

        }
    });
     ............. 
    // initialize handlers on other textBoxes as t1 TextBox
我不想像……那样做

total = Integer.parseInt(t1.getText().trim()) +
        Integer.parseInt(t2.getText().trim()) +
        Integer.parseInt(t3.getText().trim()) +
  ........

对我的问题有什么建议吗?

首先,你应该把文本框小部件放在一个列表中。 然后遍历列表并进行计算。试试这个:

List<Textbox> textBox_list = new List<Textbox>();

Textbox t1 = new TextBox("0"); 
textBox_list.add(t1);

Textbox t2 = new TextBox("0"); 
textBox_list.add(t2);

Textbox t3 = new TextBox("0"); 
textBox_list.add(t3);

...

for(Iterator<Textbox> i = textBox_list.iterator(); i.hasNext(); ) {

    total = total + Integer.parseInt(i.next().getText().trim());

}


//to get the previous value of the textbox
t1.addFocusHandler(new FocusHandler(){

    @Override
    public void onFocus(FocusEvent event) {

        String text = t1.getText().trim();
        //anything else you want to do

    }

});
List textBox\u List=new List();
文本框t1=新文本框(“0”);
文本框_列表。添加(t1);
文本框t2=新文本框(“0”);
文本框_列表。添加(t2);
文本框t3=新文本框(“0”);
文本框列表。添加(t3);
...
for(迭代器i=textBox_list.Iterator();i.hasNext();){
total=total+Integer.parseInt(i.next().getText().trim());
}
//获取文本框的上一个值
t1.添加FocusHandler(新FocusHandler(){
@凌驾
公众焦点无效(焦点事件){
String text=t1.getText().trim();
//你还想做什么
}
});

我已经回答了你前面的问题


但是,要在文本框集合或任何其他小部件/函数上找到一些值,很遗憾,您必须维护一个列表或任何其他数据结构并对其进行迭代。据我所知,没有其他方法可以解决这个问题。

我将我的问题描述为100个或更多的文本框,因为我想创建动态文本框并添加处理程序;我想优化我的程序的性能。谢谢你,先生,但迭代可能会产生类似的代码,我不想这样做。我想得到一些计算总价值的公式。如果我知道事件目标文本框的前后值,我想我可以生成计算它的公式。但我仍然很麻烦,我不知道如何轻松获得eventTarget文本框的值。这里是另一个我的问题的链接,用于在EventTarget文本框的值之前获取,如果是这样,那么您需要FocusHandler。当用户关注文本框时,您将保存其值。这是解决您的问题的唯一充分有效的解决方案。我将编辑我的答案以了解我的意思。当我为每个文本框添加focusHandler时,我需要为每个文本框添加额外的变量。如果我想动态地创建所有文本框,我认为保存每个文本框值是很困难的。我说得对吗?不,没那么难。您应该创建一个Hashmap,它是一个键值结构,在这里您将为每个文本框保留所有以前的文本字符串。
List<Textbox> textBox_list = new List<Textbox>();

Textbox t1 = new TextBox("0"); 
textBox_list.add(t1);

Textbox t2 = new TextBox("0"); 
textBox_list.add(t2);

Textbox t3 = new TextBox("0"); 
textBox_list.add(t3);

...

for(Iterator<Textbox> i = textBox_list.iterator(); i.hasNext(); ) {

    total = total + Integer.parseInt(i.next().getText().trim());

}


//to get the previous value of the textbox
t1.addFocusHandler(new FocusHandler(){

    @Override
    public void onFocus(FocusEvent event) {

        String text = t1.getText().trim();
        //anything else you want to do

    }

});