GWT ValueChangeHandler并且在值之前获得

时间:2014-01-25 06:03:23

标签: gwt event-handling handler gwt2

我希望在更改其值并更改其值之前获取textBox的值。

String beforeValue = "";
TextBox textBox = new TextBox();
    textBox.addFocusHandler(new FocusHandler() {

        public void onFocus(final FocusEvent event) {
            beforeValue = textBox.getText();

        }
    });
    textBox.addValueChangeHandler(new ValueChangeHandler<String>() {

        public void onValueChange(final ValueChangeEvent<String> event) {
            System.out.println("Before value is " + beforeValue);
            System.out.println("After value is " + textBox.getText());
        }
    });

如上面的代码,我需要两个处理程序( FocusHandler和ValueChangeHadler )来获取值和值之后。我的问题是如何通过一个Handler或其他简单易用的方式获得它?我不想使用两个处理程序来获取它。任何建议,将不胜感激。 提前致谢!

1 个答案:

答案 0 :(得分:3)

你的想法(使用2个处理程序)是公平的,但它的错误。我认为不能以更好的方式完成。如果要使用单个处理程序,请使用两个处理程序创建自定义类包装程序。

这是给你的代码。

public abstract class MyValueChangeHandler<T> implements ValueChangeHandler<T> {

T prevValue = null;
T value = null;

public MyValueChangeHandler(final ValueBoxBase<T> widget) {
    widget.addFocusHandler(new FocusHandler() {
        public void onFocus(FocusEvent event) {
            prevValue = widget.getValue();
        }
    });
}

@Override
public void onValueChange(ValueChangeEvent<T> event) {
    value = event.getValue();
    onValueChange(value, prevValue);

    // or
    // onValueChange(event, prevValue);

    prevValue = value;
}

public abstract void onValueChange(T value, T prevValue);

// or
// public abstract void onValueChange(ValueChangeEvent<T> event, T prevValue);

}

你可以用它作为,

TextBox box = new TextBox();
    box.addValueChangeHandler(new MyValueChangeHandler<String>(box) {
        @Override
        public void onValueChange(String value, String prevValue) {
            Window.alert("Prev Value : " + prevValue + " CurrnetValue: "
                    + value);
        }
    });