Java 瓦丁信息盒
我正在使用VaadinJava 瓦丁信息盒,java,vaadin,vaadin7,Java,Vaadin,Vaadin7,我正在使用VaadinMessageBox,我遇到的问题是逻辑问题是MessageBox之后的代码会立即运行,不会等待您的MessageBox答案。我试图将代码打包到一个返回布尔值的函数中。但是使用MessageBox()似乎不可能做到这一点,下面是我想做的示例: private boolean Delete(){ return true; } private boolean IsDone(){ MessageBox .createQuestion() .with
MessageBox
,我遇到的问题是逻辑问题是MessageBox
之后的代码会立即运行,不会等待您的MessageBox
答案。我试图将代码打包到一个返回布尔值的函数中。但是使用MessageBox()
似乎不可能做到这一点,下面是我想做的示例:
private boolean Delete(){
return true;
}
private boolean IsDone(){
MessageBox
.createQuestion()
.withCaption("Delete")
.withMessage("Are you sure?")
.withYesButton(()-> return Delete()) //here is where i have problem
.withNoButton(()-> {})
.open();
}
我也试过,
.withYesButton(()-> {return Delete();})
它似乎是这样工作的,但没有返回true代码>
.withYesButton(()-> {if(Delete){
return true; //doesn't work!
System.out.printLn("Works!"); // works :-?
}})
有人知道这种情况或有什么想法吗?需要用户交互的操作不会“停止”代码执行。您需要组织您的代码,以便它在“是”和“否”按钮的处理程序中继续。因此,请确保您的“流程”停止显示确认框,并在回答“是”或“否”后继续
private void IsDone(){
MessageBox
.createQuestion()
.withCaption("Delete")
.withMessage("Are you sure?")
.withYesButton(()-> onUserAnsweredYes())
.withNoButton(()-> onUserAnsweredNo())
.open();
}
withYesButton
方法获取一个Runnable
,当用户按下yes按钮时,该方法将被执行。让我们看一下Runnable
的实现:
public interface Runnable {
void run();
}
如您所见,run
返回void
,因此不能返回任何值,如true
。相反,您必须提供用于删除所需内容的代码,如:
MessageBox
.createQuestion()
.withCaption("Delete")
.withMessage("Are you sure?")
.withYesButton(()-> codeToDeleteSomething())
.open();
重复:可能重复@andré-schild这不是同一个问题,我已经读过这个主题,我的问题是我是否可以在这里做些什么。这是一个重复,因为当对话框显示时,你的代码不会停止,它会继续运行。您是否必须将删除代码放在单独的函数中并从事件侦听器调用它。我已经尝试定义一个公共变量,而不是使用return,而是使用If语句并更改该公共变量。然后,我使用了一个while语句,例外的是,如果变量发生了变化,我会暂停一段时间,但这不是一个好方法。