Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 覆盖gwt中包含表单的处理程序_Java_Gwt_Event Handling - Fatal编程技术网

Java 覆盖gwt中包含表单的处理程序

Java 覆盖gwt中包含表单的处理程序,java,gwt,event-handling,Java,Gwt,Event Handling,在GWT中,我有一个带有几个文本字段的FormPanel。这些字段具有ChangeEvent处理程序,但问题是这些处理程序必须执行特定于实现的操作。它们还必须使用UiBinder的@UiHandler 有两个类实现了这个formpanel,将来可能还会有更多。我需要将此表单放在一个位置,因为它将根据应用程序的部署环境而更改 因此,我想要的是覆盖每个实现的处理程序。目前我想到的是,通过构造函数传递实现表单实例的类,然后从textfields的处理程序调用该实现类中声明的方法,但我还想以某种方式强制

在GWT中,我有一个带有几个文本字段的FormPanel。这些字段具有ChangeEvent处理程序,但问题是这些处理程序必须执行特定于实现的操作。它们还必须使用UiBinder的
@UiHandler

有两个类实现了这个formpanel,将来可能还会有更多。我需要将此表单放在一个位置,因为它将根据应用程序的部署环境而更改

因此,我想要的是覆盖每个实现的处理程序。目前我想到的是,通过构造函数传递实现表单实例的类,然后从textfields的处理程序调用该实现类中声明的方法,但我还想以某种方式强制在实现类中声明此类方法

我现在不知道该怎么做,我可能真的错过了一些东西。最好的方法是什么

简要示例

FormPanelX

TabThatContainsFPX
PopupThatContainsFPX

选项卡和弹出窗口都包含formpanel,但字段上的ActionHandler在每种情况下的执行都必须略有不同。

为什么它们必须使用UiBinder的@UiHandler?您不必以这种方式附加处理程序

我猜你有一个类似这样的合成物

public class FormPanelX extends Composite {

private static FormPanelXUiBinder uiBinder = GWT
        .create(FormPanelXUiBinder.class);

interface FormPanelXUiBinder extends UiBinder<Widget, FormPanelX> {
}

public FormPanelX() {
    initWidget(uiBinder.createAndBindUi(this));
}

@UiField
FormPanel formPanel;

@UiField
TextBox textField;

private HandlerRegistration handlerRegistration;

public FormPanelX(String firstName) {
    initWidget(uiBinder.createAndBindUi(this));
}

public TextBox getTextField() {
    return textField;
}

public void setTextField(TextBox textField) {
    this.textField = textField;
}   
}

意思是说使用UiBinder,不一定是UiHandler,我的错。很酷,仍然觉得有点多余,但感谢伟大的例子工作!
FormPanelX form = new FormPanelX();
form.getTextField().addChangeHandler(new ChangeHandler(){

        @Override
        public void onChange(ChangeEvent event) {
            //Implementation specific to TabThatContainsFPX

        }
    });