Re: closing a specific JFrame of several



William Z. wrote:
I have a JFrame that, when I click "new" in the menu bar, creates
another JFrame like that of the first. It just runs the following code
...

EventQueue.invokeLater(new Runnable() {
public void run() {
MyApp app = new MyApp();
app.createGUI();
}
});

And inside the createGUI() method is this ...

addWindowListener(new WindowListener() {
public void windowOpened(WindowEvent arg0) {}
public void windowClosed(WindowEvent arg0) {}
public void windowIconified(WindowEvent arg0) {}
public void windowDeiconified(WindowEvent arg0) {}
public void windowActivated(WindowEvent arg0) {}
public void windowDeactivated(WindowEvent arg0) {}
public void windowClosing(WindowEvent arg0) {
System.exit(0);
}
});

As it works right now, when I close a window, all the windows close and
I'd just like to close only that specific window in which the user
clicked the close button.

Any help much appreciated.


import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class test extends JFrame implements ActionListener {
JButton openButton,closeButton;
JFrame frame;

public test() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new FlowLayout());

openButton = new JButton("Open");
openButton.addActionListener(this);
add(openButton);

closeButton = new JButton("Close");
closeButton.setEnabled(false);
closeButton.addActionListener(this);
add(closeButton);

frame = new JFrame("extra frame");
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent we) {
test.this.actionPerformed(new ActionEvent(
closeButton,ActionEvent.ACTION_PERFORMED,"Close"));
}
});
frame.setSize(400,300);
frame.setLocationRelativeTo(null);

pack();
setVisible(true);
}

public void actionPerformed(ActionEvent ae) {
String ac = ae.getActionCommand();

if (ac.equals("Open")) {
openButton.setEnabled(false);
frame.setVisible(true);
closeButton.setEnabled(true);
} else if (ac.equals("Close")) {
closeButton.setEnabled(false);
frame.setVisible(false);
openButton.setEnabled(true);
}
}

public static void main(String[] args) {
Runnable r = new Runnable() {
public void run() {
new test();
}
};
EventQueue.invokeLater(r);
}
}

--

Knute Johnson
email s/nospam/knute/
.


Quantcast