这是一个关于如何检测在MessageBox/Dialog中单击了哪个按钮的问题。仅GXT 2.1或2.2请不要使用GXT 3回答。
理想情况下,这就是我可以进行确认对话框的方式。
final MessageBox box = MessageBox.confirm(
"Confirm kill avatar",
"Please remove " + getAvatar().getName(),
new Listener<MessageBoxEvent>()
{
@Override
public void handleEvent(MessageBoxEvent be)
{
Button clicked = be.getButtonClicked();
if (clicked == box.getDialog().getButtonById("yes"))
deleteAvatar();
else
Info.display("Action cancelled");
}
});
- 然而。由于尚未定义box,box.getDialog()将是NPE
- 编译器通过"box not initialized"(框未初始化)抢先一步
- 并且不能初始化,因为框必须是最终的
- box必须是final,因为它在anon Listener类中使用
相反,我必须使用按钮文本来比较按钮。这对i18n不友好。非常糟糕的做法。
@Override
public void handleEvent(MessageBoxEvent be)
{
Button clicked = be.getButtonClicked();
if (clicked.getText().equals("Yes")))
deleteAvatar();
else
Info.display("Action cancelled");
}
在GXT 2.2中,这是推荐的方式吗?或者有没有更好的方法来检测按钮被按下,i18n友好?
我应该比较按钮而不是按钮的文本。
您可以使用:
if (Dialog.CANCEL.equals(be.getButtonClicked().getItemId())) {
//do action
}
没关系。
我应该简单地从Dialog构建我自己的confirm/alert/etc,并为我自己的提交/取消按钮提供适当的监听器。
Messagebox只是一个关于如何进行简单gxt对话框的沙盒/示例。