Wątek przeniesiony 2015-02-02 12:26 z Java przez bogdans.

Działanie programu po pobraniu wartości z innego okna

0

Mam okno. W nim przycisk, który wywołuje inne okno. Gdy w tym drugim oknie coś zrobię i je zamykam (dispose) to chcę żeby w pierwszym oknie coś się wykonało (dopiero wtedy gdy zamknę to drugie okno). Jak podejść do tematu? Wątki?

0

WindowListener podpięty do drugiego okna i obsługa metody windowClosed.

0

No dobra. Mam w oknie 1 wywołanie okna 2 (po naciśnięciu przycisku):

Okno2 ok2 = new Okno2();

Gdy skończę w tym Okno2 coś robić to klikam przycisk OK i okno się zamyka (dispose). Tutaj powinna się wykonywać dalsza część kodu z Okna1. Jak to zrobić? Bo gdy napiszę np.

if (Okno2.isActivate())
{
   ...
}

to program leci cały czas (nie czeka na zamknięcie Okna2).

0

Tutaj przekaż referencję do okna1

Okno2 ok2 = new Okno2(this);

Odbierz ją w konstruktorze Okno2 i zachowaj w polu klasy.
W metodzie windowClosed napisz kod, który zmieni cos w oknie1. Przykład:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class DwaOkna
{
    public static void main(String[] args)
    {
        new DwaOkna();
    }
    public DwaOkna()
    {
        new Okno1();
    }
    class Okno1 extends JFrame implements ActionListener
    {
        private JTextField tf = new JTextField(12);
        public Okno1()
        {
            setTitle("Pierwsze");
            setLayout(new FlowLayout());
            JButton b = new JButton("Kliknij");
            b.addActionListener(this);
            add(b);
            add(tf);
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            pack();
            setLocationRelativeTo(null);
            setVisible(true);
        }
        public void actionPerformed(ActionEvent ae)
        {
            new Okno2(this);
        }
    }
    class Okno2 extends JFrame
    {
        private Okno1 okno;
        public Okno2(Okno1 okno)
        {
            this.okno = okno;
            addWindowListener(new WindowAdapter()
            {
                public void windowClosed(WindowEvent we)
                {
                    Okno2.this.okno.tf.setText("Witaj");
                }
            });
            setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
            pack();
            setLocationRelativeTo(null);
            setVisible(true);            
        }
    }
}

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