Java JFrame 弹出窗口

标签 java swing dialog jframe popupwindow

所以我对 Java Swing 相当陌生,我偶然发现了一个困难。我有一个正在运行的主框架(应用程序的主要部分在应用程序的执行过程中可见),它有一个按钮,一旦单击,就会调用弹出框架(窗口)来收集用户的信息,并且该框架有一些组件。问题是我真的不知道调用弹出窗口和主窗口卡住执行并等待直到确定或单击弹出窗口上的取消按钮的正确方法。一旦发生这种情况,主窗口代码就会从弹出窗口收集返回的值并继续。我尝试使用同步来完成此操作,但是弹出组件甚至不加载,仅加载 JFrame 和 JPanel(白色背景),并且弹出窗口在 wait() 条件下卡住。我知道有一种方法可以用 JDialog 和其他方法来做到这一点,但是我主要关心的是发现为什么弹出框架不加载组件并在 wait() 条件之前卡住。 (当我摆脱 wait() 时,一切都会正确加载)。

    //in Main window Class:
    frame.setEnabled(false);
    Test test = getNewTest(); //should freeze on wait() in popup window
    frame.setEnabled(true);

    //in Popup Window Class
    public Test getNewTest() {

    addPanel.setVisible(true);
    addFrame.setVisible(true);

    synchronized(flag) {
        try {
            flag.wait();
        } catch (InterruptedException e) {}
    }

    addPanel.setVisible(false);
    addFrame.setVisible(false);

    if(success)
    return new Test(testName, date);
    else return null;
}


    //When OK or Cancel button clicked appropriate handler sets
    //success value and invokes flag.notify();

最佳答案

  • 从代码中获取所有同步和等待内容。要做的就是卡住 Swing 事件线程,使您的应用程序变得无用。
  • 您不想使用第二个 JFrame,因为应用程序通常只有一个主窗口或 JFrame,而不是多个。
  • 您想要使用模态对话框,例如 JOptionPane(可以容纳复杂的 GUI)或模态 JDialog(也可以容纳复杂的 GUI)。确保将模式对话框与父 JFrame 相关联。然后,Swing GUI 库将卡住主窗口,直到处理完对话框为止,并且在对话框不再可见后,主 GUI 中的代码将从对话框可见的位置恢复。

关于Java JFrame 弹出窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20081876/

相关文章:

java - 使用 TimeTCPClient 从公共(public)时间服务器获取时间

Java Swing : How does using a JTable work?

java - 为什么按下相应按钮后按键绑定(bind)停止工作?

jquery - 更改 jQuery 对话框窗口位置

java - 如何从 Maven 存储库中的 jar 中删除版本信息

java - 将间隔添加到日期时间

c++ - 我该如何修复此代码?

android - AlertDialog show() 给出 WindowManager BadTokenException

java - 如何测试使用数据库登录的Servlet?

java - 将 JCombobox 渲染到正确的问题