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;
}
}