java - 如何在对话框可见时更改对话框的模式

标签 java swing jdialog modality

我有一个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/

相关文章:

java - jUnit 测试的 Objects.equals

java - 如何改变对 JTable 的关注?

java - 如何在 Jtable 中添加序列号(S.No.),每次删除表的数据时该序列号都会更新?

java swing面板问题

java - 如何从自定义 JDialog 返回 cod

java - 如何为带圆角的 JDialog 设置 3D 边框?

java - 如何仅按长 dateInMillis 中的日期从我的数据库中进行选择?

java - 在二叉搜索树中插入方法

java - 在 Maven 中运行 JUnit 测试时出现 ClassNotFoundException

java - 通过敲击键盘上的 "enter"关闭 JDialog