如何在GWT中组合KeyUpHandler和ValueChangeHandler?

时间:2014-09-09 13:39:53

标签: java gwt event-handling handlers

如果我想在输入内容后立即更新,我发现KeyUpHandler似乎是TextBox最动态的Handler。然而,考虑到值可能会在没有人按键的情况下发生变化,因此需要使用ValueChangeHandler,不幸的是,单独使用时不是动态的,并且每次使用键盘更改TextBox的内容时都不会触发。

现在我有一个像这样的方法将两个处理程序添加到TextBox中,但我想这不是添加多个处理程序的最佳方式,也可能不是非常高效:

private void addInputValueChangeHandlers(TextBox inputTextBox) {
    inputTextBox.addKeyUpHandler(new KeyUpHandler() {

        @Override
        public void onKeyUp(KeyUpEvent event) {
            updateResult();
        }
    });

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

        @Override
        public void onValueChange(ValueChangeEvent<String> event) {
            updateResult();
        }
    });
}

那么有没有办法将它们或处理程序组合起来,以产生与此相同的效果?

2 个答案:

答案 0 :(得分:0)

覆盖onBrowseEvent或使用NativePreview Handler完成工作。

答案 1 :(得分:0)

我认为你应该通过做类似的事情来检测自己onKeyUp方法中是否有变化:

private void addInputValueChangeHandlers(TextBox inputTextBox) {
    inputTextBox.addKeyUpHandler(new KeyUpHandler() {

        @Override
        public void onKeyUp(KeyUpEvent event) {
            if(!inputTextBox.getValue().equals(previousValue)){
               updateResult();
             }
            previousValue = inputTextBox.getValue();
        }
    });
}

previousValue是您的类的属性,其初始值等于null