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