当前位置: 代码迷 >> java >> 关闭在另一个 JFrame 中打开的 JFrame
  详细解决方案

关闭在另一个 JFrame 中打开的 JFrame

热度:94   发布时间:2023-07-16 17:33:21.0

我正在构建一个应用程序,当第一个 JFrame 被禁用时,我需要在另一个 JFrame 中打开一个 JFrame。

问题是当我想关闭第二个 JFrame 时,我需要启用第一个 JFrame。

我尝试了多种方法,但它无法正常工作,而且我无法在每种方法中都达到一个目标。 我需要达到两个目标:

  1. 打开第二个框架时禁用第一个框架
  2. 当第二个 Frame 关闭时启用它。

这是我的代码的一部分:

    private void jButton10ActionPerformed(java.awt.event.ActionEvent evt) {                                          
    // TODO add your handling code here:
    PaymentJFrame pjf = new PaymentJFrame();
    //setEnableValue(false);
    //enableFrame();
    this.setEnabled(false);
    pjf.setVisible(true);
    if (!pjf.isActive()){
        this.setEnabled(true);
    }

} 

此代码根本不启用第一帧。 我试图通过在第二个框架关闭时添加enable来以另一种方式使用它,但它不起作用:

    //Class in first Frame
    private void jButton10ActionPerformed(java.awt.event.ActionEvent evt) {                                          
    // TODO add your handling code here:
    PaymentJFrame pjf = new PaymentJFrame();
    //setEnableValue(false);
    //enableFrame();
    this.setEnabled(false);
    pjf.setVisible(true); 
} 
    //Class in second Frame 
    private void formWindowClosed(java.awt.event.WindowEvent evt) {                                  
    // TODO add your handling code here:
    FinancialDocumentsJFrame.setEnableValue(true);
}                                 

有谁知道我怎样才能达到这些目标?

第一个框架是主框架,第二个框架是一个类,我从中创建框架对象以显示并从用户那里获取更多信息。

我使用 netBeans IDE 设计器。

首先,一个 Swing 应用程序 ,其他窗口可以是JDialog或其他东西。 至于你的问题,以这段代码为例。 它使用侦听器来检测第二个窗口的关闭事件。 下面的代码应该在(第一个) JFrame (看起来你有一个按钮)

private void jButton10ActionPerformed(java.awt.event.ActionEvent evt) {                                          

JDialog paymentDialog = new JDialog();

MyFirstFrame.this.setEnabled(false);
paymentDialog.setVisible(true);

paymentDialog.addWindowListener(new WindowAdapter() {
    @Override
    public void windowClosed(WindowEvent e) {
        MyFirstFrame.this.setEnabled(true);
    }
});
}

您可以像处理框架一样通过扩展JDialog来创建自己的对话框,并在此代码中使用自定义对话框。 此外,您可以考虑使用 ,而不是将JFrame设置为启用或禁用,它会在对话框处于活动状态时阻止对 JFrame 的操作。

此外,还有用于 Swing 窗口的setAlwaysOnTop(boolean)

使用this.dispose()方法JFrame具有用于JFrame关闭的dispose()方法

我决定使用 jDialog,因为网上很多人都推荐它。

我使用了一个 jDialog 并复制了我在第二个 jFrame 中使用的所有对象。

它以我想要的方式工作。

我唯一的问题是,为什么 java 没有准备一种不同的方式来满足这种需求。

我在第一个 jFrame 中使用动作侦听器打开第二个 Frame,我已经使用 jDialog 为它打开了第二个 Frame。

private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    // TODO add your handling code here:
    ActivityJDialog ajdf = new ActivityJDialog(this,true);
    ajdf.setVisible(true);
} 

我已经将我想要的所有内容复制到这个 jDialog 中。

public class ActivityJDialog extends java.awt.Dialog {

//Document Attributes 
int documentStatus = -1;
int documentType = -1;

/**
 * Creates new form AcrivityJDialog
 * @param parent
 * @param modal
 */
public ActivityJDialog(java.awt.Frame parent, boolean modal) {
    super(parent, modal);
    initComponents();
    /*if(false) // Full screen mode
    {
        // Disables decorations for this frame.
        //this.setUndecorated(true);
        // Puts the frame to full screen.
        this.setExtendedState(this.MAXIMIZED_BOTH);
    }
    else // Window mode
    {*/
        // Size of the frame.
        this.setSize(1000, 700);
        // Puts frame to center of the screen.
        this.setLocationRelativeTo(null);
        // So that frame cannot be resizable by the user.
        this.setResizable(false);
    //}
}

谢谢大家的帮助。