2012-05-29 189 views
0

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

回答

2

听者只需调用Dispose():

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

此外,通过点击X,这将处置窗口,因为你已经设置了defaultCloseOperator(DISPOSE_ON_CLOSE);

+0

感谢您的帮助! (Det funkade!) –

0

你的contentPane有一个方法叫做删除(或的removeAll,如果你想删除所有的帧)。 contentPane.remove(this)应该可能工作。

0

您只需调用该方法dipose()

0

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

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

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

+0

他想用按钮关闭同一个框架,而不是“父”框架,所以这个信息是不正确的。虽然如果它想要在GUI2中关闭GUI1,这种方法可行 –