2

WindowOpenedからイベントを取得しようとしていますが、JDialog一度だけ発生します。なぜ一度だけwindowClosing正しく動作するのWindowOpenedですか? JDialog毎回オープンイベントを発生させる方法はありますか?

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowEvent;

public class NewClass extends JDialog {

    public void init() {
        setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE);
        setModal(true);
        setSize(100,100);
        setLocationRelativeTo(null);
    }

    public void addListener() {
        addWindowListener(
            new java.awt.event.WindowAdapter() {
            public void windowOpened(WindowEvent e) {
                System.out.println("Invoking WindowOpened from JDialog");
            }
            public void windowClosing(WindowEvent e) {
                System.out.println("Invoking WindowClosing from JDialog");
                dispose();
            }
        });
    }

    public static void main( String args[]) {
        JFrame f = new JFrame();
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setSize(200,70);

        final NewClass d = new NewClass();
        d.init();
        d.addListener();

        JButton b = new JButton("Show Dialog");
        b.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                d.setVisible(true);
            }
        });

        f.getContentPane().add(b);
        f.setLocationRelativeTo(null);
        f.setVisible(true);
    }
}
4

2 に答える 2

2
addWindowListener(new WindowAdapter() {
            @Override
            public void windowActivated(WindowEvent e) {
                // TODO Auto-generated method stub
                super.windowActivated(e);
            }
        });
于 2013-02-28T16:36:54.210 に答える
2

ComponentListener#componentShown(ComponentEvent e)は、ウィンドウが表示されるたびに発生します。

WindowActivated は、他の状況で発生する可能性があるため、(他の人が言ったように) 良い選択だとは思いません。たとえば、Dialog がモーダルでない場合、ウィンドウがフォーカスを取り戻すたびに WindowActivated が発生します。

于 2015-12-14T11:42:41.093 に答える