单击JButton后关闭jFrame

时间:2013-09-21 09:56:08

标签: java swing jbutton

我在NetBeans中设计了两个JFrame。

当我点击“规则”按钮(即放在JFrame1上)时,它会打开第二个JFrame(但是JFrame2会打开JFrame1的窗口,这就是我不想要的)。 在第二个JFrame中有一个“关闭”按钮。但是当我单击此按钮时,我希望打开JFrame1并且它也正常工作,但JFrame2实际上没有关闭,而JFrame1正在JFrame2上出现。

简而言之,主要形式是JFrame1。当我点击JFrame1中的“规则”按钮时,它会在JFrame1上打开JFrame2,而在JFrame2中,当点击主窗体(即JFrame1)时会有一个“关闭”按钮,但它会通过JFrame2启动。

场景是JFframe1 - > JFrame2 - > JFrame1

现在我的问题是点击“规则”按钮后,应该关闭JFrame1并在屏幕上显示JFrame2,反之亦然。

6 个答案:

答案 0 :(得分:8)

假设你的按钮有一个actionListener,点击“规则按钮”后输入:

      JFrame1.dispose();  //Remove JFrame 1
      JFrame2.setVisible(true) //Show other frame

然后尊重他们反对的反应

答案 1 :(得分:3)

像这样的Somethig应该在创建JFrame2的构造函数或方法上:

btnCancel.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        //call another method in the same class which will close this Jframe
        CloseFrame();
    }
});

这是关闭JFrame2的方法

public void CloseFrame(){
    super.dispose();
}

答案 2 :(得分:1)

好吧,如果你已经有一个 actionListener,你应该添加这个:

JFrame1.dispose(); // This will close the frame

JFrame1 是框架的名称。 如果您想打开另一个框架,请添加:

JFrame2.setVisible(true); // This will put the other frame visible

答案 3 :(得分:0)

这对我有用(Frame1被叫RegScreenFrame2被叫MainScreen):

RegScreen.this.setVisible(false);

new MainScreen().setVisible(true);

希望这有帮助:) Regscreen是在启动时打开的原始框架。

答案 4 :(得分:0)

如果这不起作用,请尝试此

JFrame1.dispose();  //Remove JFrame 1
      JFrame2.setVisible(true) //Show other frame
JFrame2.setVisible(true);
this.dispose();

答案 5 :(得分:0)

  1. 使用main()方法创建一个MainClass。
  2. 让具有main()方法的MainClass封装您的JFrame1和JFrame2引用变量。除非您有特定原因,否则不要让JFrame1或JFrame2包含main()。
  3. 在其中一个JFrame对象中单击某些内容后,实例化/使另一个JFrame对象可见,并通过MainProgram.JFrame对象方法处理它自己。
  4. 示例:

        //btn event inside 1st JFrame/window
        private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
             MainProgram.openResultsForm();  //MainProgram opens 2nd window
             MainProgram.queryEntryForm.dispose();   //MainProgam closes this,
                                                     //the 1st window
        }