2012-05-29 217 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,這種方法可行 –