我有一个JDialog
我将模态设置为少模型。但是,现在我需要在它可见时修改它的模态。但我知道 Swing 不允许在可见时更改对话框的模态。那么,是否有任何其他技巧或代码可以做到这一点?
问问题
873 次
2 回答
3
只是按照Javadoc所说的做......隐藏并显示对话框。
注意:更改可见对话框的模式可能无效,直到它被隐藏然后再次显示。
所以这是一个工作示例:
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!
你是否真的想在显示对话框的同时继续切换模式的做法取决于你,但从用户体验的角度来看,我不建议这样做——感觉很奇怪。
于 2016-02-25T08:58:36.090 回答
-1
更新对话框并调用repaint()
它。如果您更改了层次结构(添加/删除组件),那么不要忘记revalidate()
.
于 2016-02-25T09:23:04.750 回答