我有一个JDialog
,我将其模式设置为无模型。但是,现在我需要在它可见时修改它的模式。但我知道 Swing 不允许在对话框可见时更改其模式。那么,还有其他技巧或代码可以做到这一点吗?
最佳答案
只是做 Javadoc 的事说...隐藏和显示对话框。
Note: changing modality of the visible dialog may have no effect until it is hidden and then shown again.
这是一个有效的示例:
public class ModalDialogTest {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
JFrame frame = new JFrame ();
final JDialog dialog = new JDialog(frame);
dialog.setModal(true);
Runnable modalSwitcher = new Runnable() {
@Override
public void run() {
try {
System.out.println("Worker thread: sleeping for 5 seconds");
Thread.sleep(5000);
System.out.println("Worker thread: sleeping finished!");
} catch (InterruptedException ex) {
// this thread is not interrupted
}
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
System.out.println("ENTERING MODALSWITCHER!");
dialog.setModalityType(ModalityType.MODELESS);
dialog.setVisible(false);
dialog.setVisible(true);
System.out.println("NO LONGER MODAL!");
}
});
}
};
new Thread(modalSwitcher).start();
System.out.println("DIALOG WILL NOW SHOW UP:");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
dialog.setVisible(true);
System.out.println("BYE!");
}
});
}
}
5 秒后,您将能够单击父 JFrame。
这是程序打印的内容:
DIALOG WILL NOW SHOW UP:
Worker thread: sleeping for 5 seconds
Worker thread: sleeping finished!
ENTERING MODALSWITCHER!
NO LONGER MODAL!
BYE!
您是否真的想继续在显示对话框时切换模式的做法取决于您,但从用户体验的角度我不推荐它 - 这感觉很奇怪。
关于java - 如何在对话框可见时更改对话框的模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35622259/