[英]Closing a JFrame window?
我正在使用兩個框架。 在第一幀中,我有一個按鈕來打開第二幀。 在第二幀中還有一個按鈕,但是這個按鈕用於關閉第二幀。 但我不知道該怎么做,我正在尋找一些幫助來解決這個問題?
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 ??
}
}
}
只需在監聽器中調用dispose():
public void actionPerformed(ActionEvent event){
if(event.getSource() == btn2)
{
dispose();
}
此外,通過單擊X,這將defaultCloseOperator(DISPOSE_ON_CLOSE);
窗口,因為您已設置defaultCloseOperator(DISPOSE_ON_CLOSE);
您的contentPane有一個名為remove的方法(如果您要刪除所有框架,則刪除所有框架)。 contentPane.remove(this)應該可以工作。
你只調用方法dipose()
。
您需要在GUI2中引用GUI1的實例。 因此,可以在GUI2類中添加私有變量private GUI1 firstGUI
。 然后編寫一個setter方法public void setGUI1(GUI1 myFirstGUI){ this.firstGUI = myFirstGUI; }
public void setGUI1(GUI1 myFirstGUI){ this.firstGUI = myFirstGUI; }
。
然后,您應該使用此setter從外部設置GUI1變量。
然后你可以在你的actionPerformed方法中為btn2調用firstGUI.dispose()
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.