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

时间:2015-07-25 09:41:52

标签: java swing netbeans jframe

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

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

我已经尝试了几种方式,但它无法正常工作,我无法在每种方法中实现一个目标。我需要实现这两个目标:

  1. 第二帧打开时禁用第一帧
  2. 关闭第二帧时启用它。
  3. 以下是我的代码的一部分:

        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设计器。

3 个答案:

答案 0 :(得分:2)

首先,Swing应用程序should only have one 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来创建自己的对话框,并使用此代码中的自定义对话框。此外,您可以考虑在对话框处于活动状态时使用modal JDialog来阻止对JFrame的操作,而不是设置启用或禁用JFrame

而且,Swing窗口还有setAlwaysOnTop(boolean)

答案 1 :(得分:0)

使用this.dispose()方法JFrame使用dispose()方法JFrame关闭

答案 2 :(得分:0)

我决定使用jDialog,就像网上很多人推荐的一样。

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

它按我想要的方式工作。

我唯一的问题是为什么java没有准备好不同的方式来回答这个需求。

我在第一个jFrame中使用动作侦听器来打开我使用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);
    //}
}

谢谢大家的帮助。