遇到问题 - 点击后我想从面板中删除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。在网站上搜索了类似的问题,发现只有禁用,但这不是我需要的。
答案 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。