Aplikacja okienkowa - przechodzenie do nowego okna.

0

Witam,
pierwszy raz piszę aplikację okienkową w Javie i mam pewne problemy. Program ma robić 4 różne rzeczy, niezależne od siebie i chciałabym, aby na początku była możliwość wyboru co chcemy zrobić, np. 4 przyciski. Po naciśnięciu otwierałoby się nowe okno odpowiednio dla danego przycisku. W tym momencie jakoś radzę sobie z tymi poszczególnymi częściami, tylko nie wiem, jak to połączyć w ten sposób. Proszę o pomoc, tylko taką "czytelną" dla początkującego:)

0

W konstruktorze głównego wywołaj konstruktory okien potomnych, ale nie umieszczaj w tych konstruktorach instrukcji

setVisible(true);
//ani
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//najlepiej umieść (jest to zresztą zachowanie domyślne w klasie JFrame)
setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);

Referencje do utworzonych okien zapamiętaj w polach głównego okna. Potem w reakcji na kliknięcie przycisku wywołasz

referencja_do_okna.setVisible(true);
0

Ok, dzięki:) Tylko w takim razie gdzie mają być te potomne okna? Chodzi mi o to, że wyklikuję to wszystko w Netbeansie i w ogóle nie wiem gdzie to wszystko tworzyć. Mam powiedzmy Form MojaJFrame i tam jest to główne okno JFrame. Chyba nie jest tak, że każde z tych okien to kolejne new->JFrame Form, bo wtedy w każdym tworzy mi się automatycznie klasa z metodą main... Pewnie w ogóle głupie pytania zadaję, ale nie mogę się w tym połapać...

0

Ja niczego nie wyklikuję, wszystko piszę, więc nie znam tych problemów.

0

nie umieszczaj metody "main" w JFrame, zrób osobną klasę:

import java.awt.EventQueue;

public class Main {
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable()
        {
            public void run() {
                new MojaJFrame();
            }
        });
    }
}

ten wątek Swinga uruchomi twoją ramkę główną, w niej możesz robić co chcesz (powiedzmy), np. tworzyć nowe ramki po kliknięciu na przycisk, nowe panele itp...

0

Do Swinga jest specjalna klasa SwingUtilities a tam metoda invokeLater do uruchamiania wątku.

0

zgadza się

import javax.swing.*;

public class Main {
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable()
        {
            public void run() {
                new MojaRamka();
            }
        });
    }
}

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