私は C++ を学んで以来、他のプログラミング言語 (Java など) のいくつかの機能について、ときどき C++ の観点から考えずにはいられません。これは、私がそれらを 100% 信頼していないためである可能性があり (何でも 100% 信頼するのはばかげていると思います)、JFrame に関する内容は私の心配を裏付けるだけです。JFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
JFramesによって要求されたメモリは、使用されなくなったときにシステムに返さなければならないことをどこかで読んだことを覚えています。C++ では、クラスdelete this;
のメソッド内で呼び出すことに相当します。close()
私はこれを試し、クラスに WindowListener を実装させました。次に、いくつかのSystem.out.print()
メソッドをに入れましたがwindowClosed()
、 windowClosing()
JFrame を閉じても何も起こりませんでした!!
私は次のようなことをしました:
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
}
}
はい、すべてのコードを表示することになりました