【问题标题】:Java: How do I close a JFrame while opening another one?Java:如何在打开另一个 JFrame 的同时关闭一个 JFrame?
【发布时间】:2011-01-17 18:15:01
【问题描述】:

我的程序从带有 JFrame 中的文本字段的图片开始。我希望当用户输入时它会关闭图片 JFrame 并使用主程序打开另一个 JFrame。我试过了

processEvent(new WindowEvent(this, WindowEvent.WINDOW_CLOSING));

在图像框架上,但它会关闭所有窗口。

【问题讨论】:

    标签: java image swing netbeans-6.9


    【解决方案1】:

    JFrame.setVisible 方法可用于根据参数隐藏或显示 JFrame,而 JFrame.dispose 实际上会“销毁”该框架,方法是关闭它并释放它使用的资源。在这里,如果您打算重新打开相框,您可以在相框上调用setVisible(false),或者如果您不再打开相框,请在相框上调用dispose(),这样您的程序可以释放一些内存。然后在主框架上调用setVisible(true) 使其可见。

    【讨论】:

      【解决方案2】:

      您也可以使用此代码

      例如

        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
      

      【讨论】:

        【解决方案3】:

        也许如果您将图片 JFrame 的 default close operation 设置为 EXIT_ON_CLOSE 之外的其他值,也许是 DISPOSE_ON_CLOSE,您可以防止您的应用程序在第二个 JFrame 出现之前关闭。

        【讨论】:

          【解决方案4】:

          这篇文章有点老了,不过。

          如果你这样初始化表单:

          JFrame firstForm = new JFrame();
          
          firstForm.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
          firstForm.setSize(800, 600);
          firstForm.setLocationRelativeTo(null);
          
          firstForm.setVisible(true);
          

          例如,通过按钮创建或打开另一个表单:

          JFrame secondForm = new JFrame();
          
          secondForm.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
          secondForm.setSize(800, 600);
          secondForm.setLocationRelativeTo(null);
          
          secondForm.setVisible(true);
          
          this.dispatchEvent(new WindowEvent(this, WindowEvent.WINDOW_CLOSING));
          

          这将在不退出程序的情况下处理并销毁第一个窗口。
          关键是设置setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE).
          它还会引发事件(我已经使用 WindowClosing 事件对其进行了测试)。

          【讨论】:

            【解决方案5】:

            这是我对这个问题的解决方案:

            public void actionPerformed(ActionEvent e) {
                String userName =  textField.getText();
                String password = textField_1.getText();
                if(userName.equals("mgm") &&  password.equals("12345")) {            
                     secondFrame nF = new secondFrame();
            
                     nF.setVisible(false);
                     dispose();          
                }   
                else 
                {
                    JOptionPane.showMessageDialog(null, " Wrong password ");
                }
            }
            

            【讨论】:

              【解决方案6】:

              你也可以用这个:

              opens_frame frameOld= new opens_frame();
                          frameOld.setVisible(true);
                          Closing_Frame.setVisible(false);
                          Closing_Frame.dispose();
              

              【讨论】:

                【解决方案7】:
                private void closeTheCurrentFrameAndOpenNew(java.awt.event.ActionEvent evt){
                
                 dispose();//To close the current window
                
                 YourClassName closeCurrentWindow = new YourClassName();
                 closeCurrentWindow.setVisible(true);//Open the new window
                
                }
                

                【讨论】:

                  【解决方案8】:

                  我一直在寻找同样的东西,发现使用“this”是最好和最简单的选择。 您可以使用以下代码: this.dispose();

                  【讨论】:

                    【解决方案9】:

                    对于netbeans,使用当前对象的引用和setVisible(false); 例如

                    private void submitActionPerformed(java.awt.event.ActionEvent evt)
                    {                                
                        // TODO add your handling code here:
                        this.setVisible(false);//Closing the Current frame
                        new login().setVisible(true);// Opening a new frame
                    }                                     
                    

                    【讨论】:

                      【解决方案10】:

                      先调用它

                      new Window().nextjframe.setVisible(true);
                      thisjframe.setVisible(false);
                      

                      【讨论】:

                        【解决方案11】:
                        if(username.equals("gaffar")&&password.equals("12345"))
                            {
                            label.setText("Be ready to continue");
                            //Start of 2nd jframe
                            NewJFrame1 n=new NewJFrame1();
                             n.setVisible(true);
                             //Stop code for ist jframe
                             NewJFrame m=new NewJFrame();
                             m.setVisible(false);
                             dispose();
                            }
                        

                        【讨论】:

                          猜你喜欢
                          • 2019-02-22
                          • 1970-01-01
                          • 2015-10-15
                          • 1970-01-01
                          • 2022-12-03
                          • 1970-01-01
                          • 1970-01-01
                          • 2011-06-22
                          • 1970-01-01
                          相关资源
                          最近更新 更多