0

私は 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

}

}

はい、すべてのコードを表示することになりました

4

1 に答える 1