2012-05-29 6 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 (это), вероятно, должно работать.

0

Вы только вызвать метод dipose().

0

Вам нужна ссылка на ваш экземпляр GUI1 в GUI2. Поэтому, возможно, добавьте приватную переменную private GUI1 firstGUI в свой класс GUI2. Затем напишите метод сеттера public void setGUI1(GUI1 myFirstGUI){ this.firstGUI = myFirstGUI; }.

Затем вы должны установить переменную GUI1 снаружи с этим установщиком.

И тогда вы можете позвонить firstGUI.dispose() в свой ActionPerformed Method для btn2.

+0

Он хочет закрыть тот же фрейм с кнопкой, а не с «родительским» фреймом, поэтому эта информация неверна. Altho, если он хочет закрыть GUI1 из GUI2, этот подход будет работать –

Смежные вопросы