Wymiana zmiennych pomiędzu dwoma JFrame

0

Posiadam dwa JFrame w dwóch oddzielnych klasach(plikach).

W JFrame 1 mam JTextField i JButton

W JFrame 2 też mam JTextField i JButton

Chciałbym aby wpisując jakąś wartość w JFrame 1 można ją było odczytać po uruchomieniu w nowym oknie w JFrame 2.

Czy jest szansa aby zrobić to bez użycia zapisu zmiennych w odrębnych plikach?

Póki co kombinowałem z:

 
NewJFrame frame = new NewJFrame();
tekst3 = frame.gettekst();

Ale niestety tworząc nowy obiekt nie uwzględniałem przecież tego co wpisałem.

0

Pytanie pada po raz 3256.
Do konstruktora jednej z klas przekaż referencję do drugiego okna.

0

Tak tylko, że wtedy mogę odczytać zmienna tylko na "sztywno" zainicjalizowaną w innej klasie.

0

Nieprawda.

JFrame1 okno1 = new JFrame1();
new JFrame2(okno);
...
public class JFrame2
{
     private JFrame1 frame1;
     ...
     public JFrame2(JFrame1 frame1)
     {
         this.frame1 = frame1;
     }
     ...
}

W dowolnym fragmencie kodu klasy JFrame1 możesz odczytać co zechcesz z klasy JFrame1 (pod warunkiem, że napiszesz metody dostępowe, albo poprosisz IDE żeby Ci je napisał).

0

Ok.

Tylko nie działa gdy mam otwarte dwa okna obok siebie i w JFrame1 w jextfield wpisuje "blabla" i chcę to odczytać w JFrame2.

0

To musisz w druga stronę, JFrame1 ma referencję do JFrame2, a pole tekstowe ma listenera. Typ listenera zależy od tego co ma być sygnałem zmiany (np. czy po dopisaniu litery w jednym polu ma się ona dopisać w drugim). Możesz też użyć interfejsu Observer.

0

A może jakiś zapis zmiennych w zewnętrznym pliku?
Co lepsze?

0

Gorsze, też musisz wiedzieć kiedy z tego pliku odczytać. Bez listenera czy tez Observera sie nie obejdzie.

0

Próbuję dziś od rana i nie działa.

Mógłbyś na przykładzie prostych dwóch klas w NetBeansie np. pokazać jak to ma być.

Z góry dzięki!

0

To jeszcze napisz kiedy tekst w drugim oknie ma się zmieniać. Na bieżąco (tzn. po każdej wpisanej literze), czy też po wpisaniu całości użytkownik coś robi (w coś klika, naciska Enter, spluwa przez ramię,...) i wtedy tekst jest przepisywany.

0

Ja chciałbym tak :

Jframe1 ma textfield1, button1 i zmienną String tekst1.
Jframe2 ma textfield2 i button2 i zmienną String tekst2.
Oczywiście osobne pliki.

Wpisujemy w textfield1 "blabla" i naciskamu button1 który zapisuje tekst do zmiennej tekst1.
Uruchamiam sobie Jframe2 i naciskam tam button2 i to skutkuje przepisaniem tekst2 = tekst1 wyświetlenie na textfield2 "blabla".

0

Co znaczy zwrot uruchamiam JFrame2? Klasy nie można uruchomić. Uruchomić można program. Okna klas JFrame1 i JFrame2, to są okna otwierane w jednym i tym samym programie, czy w dwóch różnych programach?

0

chodzi mi o to, że dwie osobne klasy, dwie metody main, ale jeden projekt netbeansowy

0

Nie mogłeś wcześniej napisać, że to są dwa różne programy? Najprościej, to chyba jednak z wykorzystaniem pliku.

0

Jakieś namiary mógłbyś podać?

0

Chodziło mi o "namiary" jak to zrobić.

0

Np. FileWriter i FileReader.

0

Zrobiłem to na Properties, proste i skuteczne.

tekst1 = jTextField1.getText();
        Properties properties = new Properties();
        properties.setProperty("pojemnoscbaku", tekst1);
        OutputStream propOut = null;
        try {
            propOut = new FileOutputStream(new File("properties.stat"));
        } catch (FileNotFoundException ex) {
            Logger.getLogger(J1.class.getName()).log(Level.SEVERE, null, ex);
        }
        try {
            properties.store(propOut,"");
        } catch (IOException ex) {
            Logger.getLogger(J1.class.getName()).log(Level.SEVERE, null, ex);
        }
 
Properties prop = new Properties();
        try {
            prop.load(new FileInputStream("C:\\Users\\Marcin\\Documents\\NetBeansProjects\\JavaApplication3\\properties.stat"));
        } catch (IOException ex) {
            Logger.getLogger(J2.class.getName()).log(Level.SEVERE, null, ex);
        }
                        String name = prop.getProperty("pojemnoscbaku");

                        jTextField1.setText(name);

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