GWT ValueChangeHandler和在值之前获取

GWT ValueChangeHandler和在值之前获取,gwt,event-handling,handler,gwt2,Gwt,Event Handling,Handler,Gwt2,我想在更改文本框的值之前和之后获取文本框的值 String beforeValue = ""; TextBox textBox = new TextBox(); textBox.addFocusHandler(new FocusHandler() { public void onFocus(final FocusEvent event) { beforeValue = textBox.getText(); } });

我想在更改文本框的值之前和之后获取文本框的值

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());
        }
    });
字符串beforeValue=“”;
TextBox TextBox=新建TextBox();
addFocusHandler(新的FocusHandler(){
公众焦点无效(最终焦点事件){
beforeValue=textBox.getText();
}
});
addValueChangeHandler(新的ValueChangeHandler(){
价值变更时的公共作废(最终价值变更事件){
System.out.println(“前值为”+前值);
System.out.println(“后面的值是”+textBox.getText());
}
});
正如上面的代码一样,我需要两个处理程序(FocusHandler和ValueChangeHadler)来获取前值和后值。我的问题是,我如何通过一个处理程序或另一种简单易行的方法获得它?我不想使用两个处理程序来获得它。如有任何建议,将不胜感激提前谢谢

您的想法(使用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);

}
公共抽象类MyValueChangeHandler实现ValueChangeHandler{
T prevValue=null;
T值=null;
公共MyValueChangeHandler(最终ValueBoxBase小部件){
addFocusHandler(新的FocusHandler(){
公众焦点无效(焦点事件){
prevValue=widget.getValue();
}
});
}
@凌驾
ValueChange上的公共作废(ValueChangeEvent事件){
value=event.getValue();
onValueChange(值、prevValue);
//或
//onValueChange(事件、prevValue);
价值=价值;
}
公开摘要价值变更无效(T值,T值);
//或
//关于ValueChange的公共摘要无效(ValueChangeEvent事件,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);
        }
    });
TextBox=newtextbox();
addValueChangeHandler(新的MyValueChangeHandler(框){
@凌驾
public void onValueChange(字符串值、字符串值){
Window.alert(“Prev值:+prevValue+”CurrentValue:”
+价值);
}
});
您的想法(使用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);

}
公共抽象类MyValueChangeHandler实现ValueChangeHandler{
T prevValue=null;
T值=null;
公共MyValueChangeHandler(最终ValueBoxBase小部件){
addFocusHandler(新的FocusHandler(){
公众焦点无效(焦点事件){
prevValue=widget.getValue();
}
});
}
@凌驾
ValueChange上的公共作废(ValueChangeEvent事件){
value=event.getValue();
onValueChange(值、prevValue);
//或
//onValueChange(事件、prevValue);
价值=价值;
}
公开摘要价值变更无效(T值,T值);
//或
//关于ValueChange的公共摘要无效(ValueChangeEvent事件,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);
        }
    });
TextBox=newtextbox();
addValueChangeHandler(新的MyValueChangeHandler(框){
@凌驾
public void onValueChange(字符串值、字符串值){
Window.alert(“Prev值:+prevValue+”CurrentValue:”
+价值);
}
});
您的想法(使用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);

}
公共抽象类MyValueChangeHandler实现ValueChangeHandler{
T prevValue=null;
T值=null;
公共MyValueChangeHandler(最终ValueBoxBase小部件){
addFocusHandler(新的FocusHandler(){
公众焦点无效(焦点事件){
prevValue=widget.getValue();
}
});
}
@凌驾
ValueChange上的公共作废(ValueChangeEvent事件){
value=event.getValue();
onValueChange(值、prevValue);
//或
//onValueChange(事件、prevValue);
价值=价值;
}
公开摘要价值变更无效(T值,T值);
//或
//关于ValueChange的公共摘要无效(ValueChangeEvent事件,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);
        }
    });
TextBox=newtextbox();
addValueChangeHandler(新的MyValueChangeHandler(框){
@凌驾
public void onValueChange(字符串值、字符串值){
Window.alert(“Prev值:+prevValue+”CurrentValue:”
+价值);
}
});
您的想法(使用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);

}
公共抽象类MyValueChangeHandler实现ValueChangeHandler{
T prevValue=null;
T值=null;
公共MyValueChangeHandler(最终ValueBoxBase小部件){
addFocusHandler(新的FocusHandler(){
公众焦点无效(焦点事件){
prevValue=widget.getValue();
}
});
}
@凌驾
ValueChange上的公共作废(ValueChangeEvent事件){
value=event.getValue();
onValueChange(值、prevValue);
//或
//onValueChange(事件、prevValue);
价值=价值;
}
公开摘要价值变更无效(T值,T值);
//或
//关于ValueChange的公共摘要无效(ValueChangeEvent事件,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);
        }
    });
TextBox=newtextbox();
addValueChangeHandler(新的MyValueChangeHandler(框){
@凌驾
public void onValueChange(字符串值、字符串值){
Window.alert(“Prev值:+prevValue+”CurrentValue:”