Ever since I have learned C++, I cannot help but think of some of the features in some of the other programming languages (namely, Java) in terms of C++ every now and then. This may be because I simply don't trust them 100% (I think it is foolish to trust ANYTHING 100%), and the stuff about JFrame only confirms my worry. I remember reading somewhere that the memory requested by the JFrames must be given back to the system when it is no longer being used, and that could be done by JFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
I would like to know if having a class that is a JFrame making it dispose on close the equivalent of, in C++, invoking delete this;
inside a close()
method of a class.
I have tried this, and had the class implement WindowListener. I then put some System.out.print()
method in windowClosed()
, windowClosing()
AND NOTHING HAPPENED WHEN I CLOSED THE JFrame!!
I did something like:
import java.awt.GridLayout;
import java.awt.HeadlessException;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.WindowListener;
import java.awt.event.WindowEvent;
import javax.swing.ButtonGroup;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
public class ItemListenerDemo extends JFrame implements WindowListener,ItemListener
{
private JRadioButton buttonA, buttonB;
private ButtonGroup radioButtonGroup;
private JLabel buttonSelectionLabel;
private JPanel buttonPanel;
private GridLayout gridLayout;
public ItemListenerDemo(String title) throws HeadlessException
{
super(title);
//setting up the buttons
buttonA = new JRadioButton("Option A", true);
buttonB = new JRadioButton("Option B", false);
//adding itemListeners
buttonA.addItemListener(this);
buttonB.addItemListener(this);
//adding the buttons to the radioButtonGroup
radioButtonGroup = new ButtonGroup();
radioButtonGroup.add(buttonA);
radioButtonGroup.add(buttonB);
//adding buttons to JPanel
buttonPanel = new JPanel();
buttonPanel.add(buttonA);
buttonPanel.add(buttonB);
//making the buttonSelectionLabel
buttonSelectionLabel = new JLabel("some text");
//setting up the gridLayout
gridLayout = new GridLayout(2,1);
//setting the layout of the demo to the gridLayout
setLayout(gridLayout);
//adding components to demo
add(buttonSelectionLabel);
add(buttonPanel);
//setting up the demo
setSize(200,200);
setVisible(true);
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
}
/**
* @param args
*/
public static void main(String[] args)
{
ItemListenerDemo demo = new ItemListenerDemo("Item Listener Example");
}
@Override
public void itemStateChanged(ItemEvent e) {
// TODO Auto-generated method stub
buttonSelectionLabel.setText("You selected " +
((JRadioButton)e.getItem()).getText());
}
@Override
public void windowActivated(WindowEvent e) {
// TODO Auto-generated method stub
}
@Override
public void windowClosed(WindowEvent e) {
// TODO Auto-generated method stub
System.out.println(this.toString() + " was deleted");
}
@Override
public void windowClosing(WindowEvent e) {
// TODO Auto-generated method stub
System.out.println(this.toString() + " was deleted");
}
@Override
public void windowDeactivated(WindowEvent e) {
// TODO Auto-generated method stub
}
@Override
public void windowDeiconified(WindowEvent e) {
// TODO Auto-generated method stub
}
@Override
public void windowIconified(WindowEvent e) {
// TODO Auto-generated method stub
}
@Override
public void windowOpened(WindowEvent e) {
// TODO Auto-generated method stub
}
}
Yes, I ended up showing you ALL MY CODE