Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/460.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
在GWT(或Java AWT Swing)中,如何使用相同的事件处理程序对相同类型的多个对象执行相同的函数_Java_Javascript_Events_Gwt - Fatal编程技术网

在GWT(或Java AWT Swing)中,如何使用相同的事件处理程序对相同类型的多个对象执行相同的函数

在GWT(或Java AWT Swing)中,如何使用相同的事件处理程序对相同类型的多个对象执行相同的函数,java,javascript,events,gwt,Java,Javascript,Events,Gwt,我刚开始研究Gwt2.0。我这里有两个文本框。两者都执行相同的事件操作。使用 addFocusListener() 我现在拥有的是 areaBox.addFocusListener(new FocusListener(){ @Override @Deprecated public void onFocus(Widget arg0) { // TODO Auto-generated method stub

我刚开始研究Gwt2.0。我这里有两个文本框。两者都执行相同的事件操作。使用

addFocusListener()
我现在拥有的是

areaBox.addFocusListener(new FocusListener(){

        @Override
        @Deprecated
        public void onFocus(Widget arg0) {
            // TODO Auto-generated method stub
            areaBox.setTitle("Area");
        }
            @Override
            public void onLostFocus(Widget arg0) {
                if(areaBox.getText().length() >= 4 )
                {
                    areaBox.setStyleName("gwt-TextBox-Success");
                }
                else
                {
                    areaBox.setStyleName("gwt-TextBox-Error");
                    cityBox.setText("Enter Area Name ");
                    areaBox.addFocusListener(new FocusListener(){

                        @Override
                        @Deprecated
                        public void onFocus(Widget arg0) {
                            areaBox.setText(null);
                            areaBox.setStyleName("gwt-TextBox-AE");

                        }

                        @Override
                        @Deprecated
                        public void onLostFocus(Widget arg0) {

                        }

                    });

                }
            }

});
cityBox.addFocusListener(new FocusListener(){

    @Override
    @Deprecated
    public void onFocus(Widget arg0) {
        cityBox.setTitle("City");
    }
        @Override
        public void onLostFocus(Widget arg0) {
            if(cityBox.getText().length() >= 4 )
            {
                cityBox.setStyleName("gwt-TextBox-Success");
            }
            else
            {
                cityBox.setStyleName("gwt-TextBox-Error");
                cityBox.setText("Enter City Name ");

                cityBox.addFocusListener(new FocusListener(){

                    @Override
                    @Deprecated
                    public void onFocus(Widget arg0) {
                        cityBox.setText(null);
                        cityBox.setStyleName("gwt-TextBox-AE");

                    }

                    @Override
                    @Deprecated
                    public void onLostFocus(Widget arg0) {
                        // TODO Auto-generated method stub

                    }

                });

            }
        }

}); 
代码所做的是。当焦点集中在区域文本框上时,会出现一个工具提示,显示要输入的内容。当焦点丢失或转到下一个文本框(即城市文本框)时,它会检查输入的字符串是否大于4个字符。如果是,则对框应用成功css样式,如果不是,则应用错误css样式。因此,当再次单击它(AreaBox)时,文本被清除,css样式被重置

以上是一个介于2个文本框之间的示例。 请帮助我,我有近10个这样的字段,我想尽量减少代码。
我正在考虑使用集合或自定义小部件。但我不知道从哪里开始。需要你的帮助和意见。谢谢…

以下是我解决此问题的方法:

areaBox.addFocusListener(generateFocusListener("Area", "Enter Area Name "));
cityBox.addFocusListener(generateFocusListener("City", "Enter City Name "));

FocusListener generateFocusListener(final String title, final String text) {
    return new FocusListener(){

            @Override
            @Deprecated
            public void onFocus(Widget widget) {
                // initial focus happens here
                TextBox box = (TextBox) widget;
                box.setTitle(title);
            }

            @Override
            public void onLostFocus(Widget widget) {
                // Focus is lost for the first time

                TextBox box = (TextBox) widget;
                if(box.getText().length() >= 4 )
                {
                    box.setStyleName("gwt-TextBox-Success");

                    // Change focus listener so that now once pressed it resets
                    box.addFocusListener(new FocusListener(){

                        @Override
                        @Deprecated
                        public void onFocus(Widget widget) {
                            TextBox box = (TextBox) widget;
                            box.setText(null);
                            box.setStyleName("gwt-TextBox-AE");
                        }

                        @Override
                        @Deprecated
                        public void onLostFocus(Widget widget) {
                            TextBox box = (TextBox) widget;
                            if(box.getText().length() >= 4 )
                            {
                                box.setStyleName("gwt-TextBox-Success");
                            }
                            else
                            {
                                box.setStyleName("gwt-TextBox-Error");
                                box.setText(text);
                            }

                        }

                    });
                }
                else
                {
                    box.setStyleName("gwt-TextBox-Error");
                    box.setText(text);
                }
            }

    };
}

谢谢你的解决方案。它可以工作,但是css部分没有按预期工作。如果我想让错误消息显示在它旁边的标签上,而不是文本框本身。我该怎么办?对不起,我不做css:(