关闭JFrame窗口?

时间:2012-05-29 09:01:20

标签: java jframe

我正在使用两个框架。在第一帧中,我有一个按钮来打开第二帧。在第二帧中还有一个按钮,但是这个按钮用于关闭第二帧。但我不知道该怎么做,我正在寻找一些帮助来解决这个问题?

GUI1

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);
}
}

GUI2

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 个答案:

答案 0 :(得分:2)

只需在侦听器中调用dispose():

public void actionPerformed(ActionEvent event){
    if(event.getSource() == btn2)
    {
        dispose();
    }

此外,通过单击X,这将放置窗口,因为您已设置defaultCloseOperator(DISPOSE_ON_CLOSE);

答案 1 :(得分:0)

您的contentPane有一个名为remove的方法(如果您要删除所有框架,则删除所有框架)。 contentPane.remove(this)应该可以工作。

答案 2 :(得分:0)

您只需调用方法dipose()

答案 3 :(得分:0)

您需要在GUI2中引用GUI1的实例。因此,可以在GUI2类中添加私有变量private GUI1 firstGUI。然后编写一个setter方法 public void setGUI1(GUI1 myFirstGUI){ this.firstGUI = myFirstGUI; }

然后你应该用这个setter从外面设置GUI1变量。

然后你可以在你的actionPerformed方法中为btn2调用firstGUI.dispose()