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

只要您的 Window 可见,就会触发ComponentListener#componentShown(ComponentEvent e) 。

我不相信 WindowActivated 是一个好的选择(就像其他人所说的那样),因为它可以在其他一些情况下被解雇。例如,如果您的 Dialog 不是模态的,则只要窗口重新获得焦点,就会触发 WindowActivated。

于 2015-12-14T11:42:41.093 回答