繁体   English   中英

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

[英]Closing a JFrame Opened in Another JFrame

我正在构建一个应用程序,当第一个 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 应用程序应该只有一个 JFrame ,其他窗口可以是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来创建自己的对话框,并在此代码中使用自定义对话框。 此外,您可以考虑使用模态 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);
    //}
}

谢谢大家的帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM