-1

我有一个带有 JButton 的主 JFrame 窗口。当我单击按钮时,会打开一个新窗口,但是当我想关闭第二个窗口时,两个窗口都关闭了!我希望第一个一直打开。有没有办法只关闭第二个窗口?一些帮助!谢谢!

编辑:我添加新代码来显示我的问题。类 GUI1 有一个主框架和一个打开第二个框架 GUI2 的按钮,它有一个关闭 GUI2 框架的按钮。这是我无法解决的 GUI2 的结束部分。代码很简单,仅用于测试。

图形用户界面1

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class GUI1 extends JFrame implements ActionListener{
JButton btn1;
Container contentPane;
public GUI1()
{
    setTitle("GUI 1");
    setResizable(false);
    setSize(600,300);
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    contentPane = getContentPane();
    contentPane.setLayout(new FlowLayout());
    btn1 = new JButton("Open GUI 2 frame");
    contentPane.add(btn1);
    btn1.setFocusable(false);
    btn1.addActionListener(this);
}
public void actionPerformed(ActionEvent event){
    if(event.getSource() == btn1)
    {
        GUI2 frame2 = new GUI2();
        frame2.setVisible(true);
    }
}
public static void main(String[] args) {
    GUI1 frame = new GUI1();
    frame.setVisible(true);
}
}

图形用户界面2

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class GUI2 extends JFrame implements ActionListener {
Container contentPane;
JButton btn2;
public GUI2()
{
    setTitle("GUI 2");
    setResizable(false);
    setSize(400,200);
    setDefaultCloseOperation(DISPOSE_ON_CLOSE);
    contentPane = getContentPane();
    contentPane.setLayout(new FlowLayout());
    btn2 = new JButton("Close GUI 2 frame");
    contentPane.add(btn2);
    btn2.addActionListener(this);
}
public void actionPerformed(ActionEvent event){
    if(event.getSource() == btn2)
    {
        // Close GUI2 ??
    }
}
}
4

3 回答 3

2

第二次阅读后,我同意其他人的观点,他们说您不应该创建和丢弃 JFrame(或根本不应该使用多个 JFrame)。但如果你真的想走那条路,我建议:

更新:将上述建议应用于您的架构的步骤是:

  • GUI1向您的类添加一个字段private GUI2 frame- 并且只创建一次(例如在 GUI1 的构造函数中);
  • 在你的actionPerformed,只使用frame.setVisible(true)- 因为框架已经创建;
  • 如果您愿意,我相信您可以继续DISPOSE_ON_CLOSE使用 GUI2,但HIDE_ON_CLOSE更合适;
  • 因为它是GUI2- JFrame - 谁正在实现动作侦听器,所以您已经有了对它的引用:this!使用this.setVisible(false)或干脆setVisible(false)
于 2012-05-28T12:07:56.780 回答
2

我有一个带有 JButton 的主 JFrame 窗口。当我单击按钮时,会打开一个新窗口,但是当我想关闭第二个窗口时,两个窗口都关闭了!

1.useCardLayout而不是在runtime上创建一堆JFrames,真的很糟糕的概念,这些Objects从未从UsedMemory中消失,也不会被GC'ed

2.使用HIDE_ON_CLOSE代替DISPOSE_ON_CLOSE

于 2012-05-28T12:08:52.457 回答
0

更改:frame2.setDefaultCloseOperation(3);frame2.setDefaultCloseOperation(DISPOSE_ON_CLOSE);并且它应该可以工作

于 2012-05-28T12:07:58.000 回答