Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在GWT中创建模态对话框_Java_Gwt_Callback_Synchronization - Fatal编程技术网

Java 在GWT中创建模态对话框

Java 在GWT中创建模态对话框,java,gwt,callback,synchronization,Java,Gwt,Callback,Synchronization,我是一名GWT和Java新手,正在尝试如何在GWT中创建同步(模式)对话框,但我遇到了困难。DialogBox类有一个标志,表示: 如果忽略对话框中未包含的小部件的键盘和鼠标事件,则为modal-true 但这并不能使对话同步 我读到一条建议,说我需要将处理用户输入的对话框数据的代码放在OK按钮处理程序中。我不喜欢这样,因为它使对话框负责显示数据和处理数据。这导致“关注点分离”很差,违反了良好设计的“单一责任原则” 我将要执行的代码放在OK按钮处理程序中,现在希望在代码中的两个位置使用GWT对话

我是一名GWT和Java新手,正在尝试如何在GWT中创建同步(模式)对话框,但我遇到了困难。DialogBox类有一个标志,表示:

如果忽略对话框中未包含的小部件的键盘和鼠标事件,则为modal-true

但这并不能使对话同步

我读到一条建议,说我需要将处理用户输入的对话框数据的代码放在OK按钮处理程序中。我不喜欢这样,因为它使对话框负责显示数据和处理数据。这导致“关注点分离”很差,违反了良好设计的“单一责任原则”

我将要执行的代码放在OK按钮处理程序中,现在希望在代码中的两个位置使用GWT对话框。在一种情况下,当按下OK按钮时,对话框中的用户数据被添加到表中。在另一种情况下,按下OK(确定)按钮时修改表中的数据。如果我可以创建一个真正同步的对话框,那么当对话框从执行中返回时,我可以在对话框外部处理OK按钮,并且可以轻松地重用该对话框


如果被迫使用我当前的异步模型,我将需要按照描述传入额外的数据。对于这样一个普通的任务来说,这似乎需要做很多工作。我错过什么了吗?还有其他选项吗?

检查对话框。您可以使用其中一个构造函数使其成为模态。

模态标志基本上使对话框成为UI的焦点。因此,除了对话框中的内容外,其他内容都无法单击或交互

不幸的是,正如您所知,JavaScript(GWT)本质上是异步的——在浏览器中,在用户执行某些操作来触发事件之前,不会执行JS代码。因此,我们必须对这些事件作出反应

据我所知,GWT不提供同步对话框。如果是这样,则意味着引入了代码的阻塞部分。由于JavaScript是单线程的,这会将应用程序锁定在繁忙的等待中——这意味着您无法在对话框本身或其他任何地方进行任何有意义的处理

我会这样处理:

  • 创建我自己的模态对话框类,包装一个GWT对话框,我将在其中实现对话框结果,例如:保存/确定/取消按钮
  • 提供一个通知事件或回调—例如,在onDialogExit中,将向相关方提供对话框结果/OK/CANCEL/SAVE/ANYTHING。当用户采取操作(如单击按钮)退出对话框时,只需引发正确的事件。如果需要从对话框中生成某些数据,则事件还可以返回一个值
  • 为需要处理对话框结果的事件提供回调

这与您提到的函数指针链接非常相似-您只需编写自己的事件。

有一种比异步方法更好的方法

boolean okPressed = Window.confirm("Your Message Here");
您的应用程序将一直保持,直到用户按下“确定”或“取消”,并且您可以处理返回的布尔值


很遗憾,您无法更改“确定”和“取消”按钮的文本。

我使用的是DialogBox类。我不确定模态标志到底做了什么,但它不能使代码同步。我想它可以在对话框中保持焦点,但我必须测试一下。谢谢。仅仅知道GWT中没有同步对话框是非常有帮助的。现在我可以停止寻找它了。也谢谢你的建议。嗯,是的。你为什么这么说?因为你只接受了25%的答案。我已经接受了100%的答案。我接受了0%的答案,要么是错误的,要么是离题的。