Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.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 吕震中本:我如何从根面板中获得对按钮的引用?_Gwt - Fatal编程技术网

Gwt 吕震中本:我如何从根面板中获得对按钮的引用?

Gwt 吕震中本:我如何从根面板中获得对按钮的引用?,gwt,Gwt,我正在使用GWT2.4。在我的onModuleLoad方法中,给定一个字符串id,如何从RootPanel对象获取对页面上现有按钮的引用?我在试这个 public void onModuleLoad() { ... final Button submitButton = (Button) RootPanel.get("submit"); 但是得到编译错误“不能从根面板转换到按钮” 编辑: 我认为使用迭代器可以治愈痛苦,但没有骰子。下面是加载的默认HTML(请注意带有id=“su

我正在使用GWT2.4。在我的onModuleLoad方法中,给定一个字符串id,如何从RootPanel对象获取对页面上现有按钮的引用?我在试这个

public void onModuleLoad() {
    ...
    final Button submitButton = (Button) RootPanel.get("submit");
但是得到编译错误“不能从根面板转换到按钮”

编辑:

我认为使用迭代器可以治愈痛苦,但没有骰子。下面是加载的默认HTML(请注意带有id=“submit”的按钮)


文件名:
但是onModuleLoad中的这段代码会导致NullPointerException(因为找不到submitButton id)

模块加载()上的公共void{
最终按钮submitButton=(按钮)getWidgetById(“提交”);
addStyleName(“submitButton”);
...
私有小部件getWidgetById(最终字符串id){
窗口小部件eltToFind=null;
最终迭代器iter=RootPanel.get().Iterator();
while(iter.hasNext()){
最终小部件Widget=iter.next();
最终元素elt=widget.getElement();
如果(elt.getId()!=null&&elt.getId().equals(id)){
eltToFind=widget;
打破
}//如果
}//而
返回eltToFind;
}

谢谢,-Dave

get()方法返回与浏览器元素相关联的根面板,而不是具有该名称的小部件。根面板是ComplexPanel的子类,因此我认为最好的方法是使用ComplexPanel中的方法迭代小部件,从而找到您想要的小部件。

您可以使用
Document.get()获取输入元素.getElementById(“submit”).cast()
,但您将无法从中获取
按钮
小部件

如果将代码改为
而不是
(技术上不需要type=button部分,但如果不需要,某些浏览器会将其视为type=submit),则可以使用
button.wrap()

Button-Button=Button.wrap(Document.get().getElementById(“提交”);

一些GWT小部件具有静态方法wrap(),该方法允许将DOM元素转换为小部件实例


Button submit=Button.wrap(DOM.getElementById(“submit”);

wrap创建一个层,并将删除之前在该按钮上编写的所有功能

我使用下面的代码来解决相同的问题

Document.get().getElementById("buttonId").getStyle().setDisplay(false)

您能演示一下如何做到这一点吗?我已经尝试了迭代器方法(在我的编辑中),但它找不到id肯定在页面上的元素。
public void onModuleLoad() {

    final Button submitButton = (Button) getWidgetById("submit");
    submitButton.addStyleName("submitButton");
    ...

private Widget getWidgetById(final String id) {
    Widget eltToFind = null;
    final Iterator<Widget> iter = RootPanel.get().iterator();
    while (iter.hasNext()) {
        final Widget widget = iter.next();
        final Element elt = widget.getElement();
        if (elt.getId() != null && elt.getId().equals(id)) {
            eltToFind = widget;
            break;
        } // if
    } // while
    return eltToFind;
}
Document.get().getElementById("buttonId").getStyle().setDisplay(false)