单击后GWT删除按钮

时间:2015-10-20 12:25:04

标签: java button gwt

遇到问题 - 点击后我想从面板中删除GWT中的按钮。

这样的事情:

    VerticalPanel vp3 = new VerticalPanel();
    vp3.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_CENTER);

    final HorizontalPanel hp1 = new HorizontalPanel();
    hp1.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_CENTER);

    final HTML fireCondText = new HTML("Fire conditions");
    fireCondText.setStyleName("h1");

    final HTML obscurity = new HTML("Obscurity:");
    obscurity.setStyleName("h3");

    final HTML statusObscurity = new HTML("NO");
    statusObscurity.setStyleName("no");
    if (statusObscurity.getHTML() == "YES") statusObscurity.setStyleName("yes");

    Button butObscurity = new Button(
            "Edit", new ClickHandler() {
                public void onClick(ClickEvent event) {
                    final Button butYes = new Button(
                            "YES", new ClickHandler() {
                                public void onClick(ClickEvent event) {
                                    statusObscurity.setHTML("YES");
                                    hp1.remove(butYes);
                                }
                            });
                    final Button butNo = new Button(
                            "YES", new ClickHandler() {
                                public void onClick(ClickEvent event) {
                                    statusObscurity.setHTML("NO");
                                    hp1.remove(butNo);
                                }
                            });
                    hp1.add(butYes);
                    hp1.add(butNo);                     
                }
            }
            );
    butObscurity.setStyleName("editButton");

但是,显然,eclipse强调了删除方法,给了我错误:

  

局部变量但是可能尚未初始化

那么,有没有人知道如何做到这一点?或者有什么办法吗?

我也考虑过创建计数器,但这也不起作用。

很抱歉,如果这是一个愚蠢的问题,但我是GWT的新手。

P.S。在网站上搜索了类似的问题,发现只有禁用,但这不是我需要的。

4 个答案:

答案 0 :(得分:1)

您正在尝试访问尚未初始化的变量。 因此,首先创建按钮,然后附加ClickListener:

final Button butYes = new Button("YES");
butYes.addClickHandler(new ClickHandler() {
     public void onClick(ClickEvent event) {
         statusObscurity.setHTML("YES");
         hp1.remove(butYes);
     }
});

答案 1 :(得分:1)

该按钮将是ClickEvent的来源,因此:

@Override
public void onClick(ClickEvent event) {
  // …
  hp1.remove((Widget) event.getSource());
}

答案 2 :(得分:0)

全局声明您的按钮:

Button butYes = null;  
Button butNo = null;

然后修改你的方法:

            Button butObscurity = new Button(
                        "Edit", new ClickHandler() {
                            public void onClick(ClickEvent event) {
                                 butYes = new Button(
                                        "YES", new ClickHandler() {
                                            public void onClick(ClickEvent event) {
                                                statusObscurity.setHTML("YES");
                                                hp1.remove(butYes);
                                            }
                                        });
                                butNo = new Button(
                                        "YES", new ClickHandler() {
                                            public void onClick(ClickEvent event) {
                                                statusObscurity.setHTML("NO");
                                                hp1.remove(butNo);
                                            }
                                        });
                                hp1.add(butYes);
                                hp1.add(butNo);                     
                            }
                        }
                        );

答案 3 :(得分:0)

 public void onClick(ClickEvent event) {
     statusObscurity.setHTML("YES");
     hp1.remove(butYes);
 }

单击该按钮时,程序执行代码 - hp1.remove(butYes)。程序不确定变量是否有值,因此IDE显示警告 - 局部变量但是可能尚未初始化。

如果您只是解决警告,只需初始化变量。

最好的方法:

 public void onClick(ClickEvent event) {
     statusObscurity.setHTML("YES");
     if (butYes != null) {
         hp1.remove(butYes);
     }
 }

如果它是复杂的软件,你检查butYes是否为null。也许你设置butYes在某处是null。