java - 在 Java 中执行代码之前等待模态对话框关闭

标签 java swing modal-dialog jdialog

我在 NetBeans 中使用 Java、Swing,并且有主 JFrame 和一些 JDialog 窗口。

我单击一个按钮并创建 JDialog,但打开此 JDialog 后的所有代码都会立即执行。但我希望它在 JDialog 关闭时执行(JDialog 是模态的,它会阻止主框架,但不会阻止其代码)。

示例:

private void buttonActionPerformed(java.awt.event.ActionEvent evt)    
{                                       
    button.setText("Starting");
    About.main(null);
    button.setText("Ending");
}  

现在:单击按钮后,它会打开 JDialog 并且按钮上的文本为“结束”。

但我想要:要单击按钮,它应该有文本“开始”,然后 JDialog 应该出现,但现在,在它关闭后,“结束”应该是标题。

怎么做?

最佳答案

正如您所说,您正在使用 netbeans,当生成的 main 方法将对象创建包装为 SwingUtilities#invokeLater 时,这意味着此代码将在处理所有挂起的 AWT 事件后发生。因此,当您的 System.out.println("end") 处于某个事件中时,您的另一个事件将在前一个事件完成后执行!,这就是您在控制台中看到打印“end”的原因。

我不知道使用另一个主要方法而不是像普通方法一样为整个应用程序使用主要方法是否是一个好的设计。

IMO 我只是会使用,或者制作自己的“构建器”方法,因为 netbeans 生成也再次设置 L&F。

因此,为了解决您的问题,只需使用或创建您自己的构建器方法,而不用 invokeLater 包装它。

new MyDialog(null,true).setVisible(Boolean.TRUE); //may be not null 1st arg and a Frame or use SwingUtilities.windowForThisComponent(mycomponent);

关于java - 在 Java 中执行代码之前等待模态对话框关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20826314/

相关文章:

java - (修正)如何显示输入与数组的匹配?

java - 在 TabbedPane 中使用 TextArea

iOS - 如何检查模态视图是否存在

在 Bootstrap Modal 中使用 django 清晰表单的 AJAX 反馈表单

java - 由于 handshake_failure,IOS 推送通知失败

java - 接口(interface)隐式机制

java - 循环访问特定文件?

java JLabel 文本超出父 JLabel 宽度

Java Swing - 按下的键未释放(有时)

javascript - 单击其中的任何内容时从父级中删除一个类