GWT 单击后删除按钮

GWT Remove button after clicking it

有问题 - 我想在 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 强调了 remove 方法,给我错误:

The local variable butYes may not have been initialized

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

我也考虑过创建计数器,但这也行不通。

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

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

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

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

全局声明您的按钮:

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);                     
                            }
                        }
                        );
 public void onClick(ClickEvent event) {
     statusObscurity.setHTML("YES");
     hp1.remove(butYes);
 }

当您点击按钮时,程序会执行代码 - hp1.remove(butYes)。该程序不确保变量具有值,因此 IDE 显示警告 - 局部变量 butYes 可能尚未初始化。

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

最佳方法:

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

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

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

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