gpt4 book ai didi

Java JFrame 弹出窗口

转载 作者:行者123 更新时间:2023-11-30 04:09:00 26 4
gpt4 key购买 nike

所以我对 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com