Kilkukrotnie wykonywujący się windowClosed ()

0

Jestem początkujący w javie i próbowałem napisać prosty program który pobierze mi dane z jednego okna dialogowego (po jego zamknięciu) do drugiego, ale dzieje się coś bardzo dziwnego, a mianowicie gdy otworzę dialoga to w konsoli powinno mi się wyświetlić Window Opened, a gdy zamknę to Window Closed, no i tak się też dzieje z tym że:
przy pierwszym otwarciu i zamknięciu dostaje:

Window Opened
Window Closed
Window Closed
przy drugim
Window Opened
Window Closed
Window Closed
Window Closed
trzecim :
Window Opened
Window Closed
Window Closed
Window Closed
Window Closed
itd.

Nie mogę dojść z czego to wynika.
Zamieszczam kod obu klas.
Z góry dzięki za pomoc

import java.awt.BorderLayout;
/*
 * Główne okno
 */
public class Okno extends JFrame {

    private JPanel contentPane;
    private JButton wyswietl;
    private JButton dodaj;
    private JList lista;
    private Pobierz nowy=new Pobierz();;
    private ArrayList<String> list = new ArrayList();

    private ActionListener a = new ActionListener(){

        @Override
        public void actionPerformed(ActionEvent e) {
            // TODO Auto-generated method stub
            Object z;
            z=a;
            if(a==dodaj){

                nowy.pokaz();
                nowy.addWindowListener(window);

            }

            if(z==wyswietl){

            }

        }};
    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    Okno frame = new Okno();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     */
    public Okno() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 450, 300);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(null);

         dodaj = new JButton("Dodaj");
         dodaj.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                nowy=new Pobierz();
                nowy.pokaz();
                nowy.addWindowListener(window);
            }
         });
        dodaj.setBounds(256, 55, 89, 23);

        contentPane.add(dodaj);

         lista = new JList();
        lista.setBounds(69, 171, 106, -115);
        contentPane.add(lista);

        wyswietl = new JButton("Wyświetl");
        wyswietl.setBounds(256, 112, 89, 23);
        wyswietl.addActionListener(a);
        contentPane.add(wyswietl);
    }
    WindowAdapter window = new WindowAdapter(){

        @Override
        public void windowClosed(WindowEvent z) {

            System.out.println("Window Closed");
            /*if(nowy.zwtext()!=null){
            //nowy.zwtext();
            System.out.println(nowy.zwtext());
            }
            else System.out.println("Błąd");*/

            }
        @Override
        public void windowOpened(WindowEvent z) {
            System.out.println("Window Opened");
        }

    };

}
 import java.awt.BorderLayout;
/*
 * Okno dialogowe
 */

public class Pobierz extends JDialog {

    private final JPanel contentPanel = new JPanel();
    private JTextField text;
    private String txt;

    /**
     * Create the dialog.
     */
    public Pobierz() {
        setBounds(100, 100, 450, 300);
        getContentPane().setLayout(new BorderLayout());
        contentPanel.setLayout(new FlowLayout());
        contentPanel.setBorder(new EmptyBorder(5, 5, 5, 5));
        setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);

        getContentPane().add(contentPanel, BorderLayout.CENTER);
        {
            JLabel lblPodajTekst = new JLabel("Podaj Tekst");
            contentPanel.add(lblPodajTekst);
        }
        {
            text = new JTextField();
            contentPanel.add(text);
            text.setColumns(10);
        }
        {
            JPanel buttonPane = new JPanel();
            buttonPane.setLayout(new FlowLayout(FlowLayout.RIGHT));
            getContentPane().add(buttonPane, BorderLayout.SOUTH);
            {
                JButton okButton = new JButton("OK");
                okButton.addActionListener(new ActionListener() {
                    public void actionPerformed(ActionEvent e) {

                        txt=text.getText();
                        setVisible(false);
                        dispose();
                }});
                //okButton.setActionCommand("OK");
                buttonPane.add(okButton);
                //getRootPane().setDefaultButton(okButton);
            }
            {
                JButton cancelButton = new JButton("Cancel");
                cancelButton.setActionCommand("Cancel");
                buttonPane.add(cancelButton);
            }
        }

    }
    public void pokaz(){
        setVisible(true);
    }

    public String zwtext(){
        return txt;
    }
}
0

W obsłudze zdarzenia dodajesz kolejnego listenera

    public void actionPerformed(ActionEvent arg0) 
    {
       nowy=new Pobierz();
       nowy.pokaz();
       nowy.addWindowListener(window); //<- tu dodajesz
   }

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0