我正在使用两个框架。在第一帧中,我有一个按钮来打开第二帧。在第二帧中还有一个按钮,但是这个按钮用于关闭第二帧。但我不知道该怎么做,我正在寻找一些帮助来解决这个问题?
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 ??
}
}
}
答案 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()
。