我在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应该出现,但现在,在它关闭后,“结尾”应该是标题。
怎么做?
答案 0 :(得分:2)
正如您所说的那样,您正在使用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);