Swing - ponowne otworzenie okna

0

Słuchajcie mam pewien problem.
Mam aplikacje, napisaną z wykorzystaniem swinga, która składa się z 3 JFrame'ów.

Główny widok jest powiązany z metodą main, która wygląda jak poniżej

public class Main {
public static void main(String[] args) {
    Form form = new Form();

    checkIfRunning();
} 

widok główny - form
user image

form ma zdefiniowane dwa buttony, gdzie każdy z nich wywołuje nowego jFrame'a, ale w przypadku kiedy obecnie nie jest utworzony obiekt tej klasy.
Poniżej listener jednego z przycisków.

 newDoctorButton.addActionListener(new ActionListener() {
        private NDoctor dc = null;
        @Override
        public void actionPerformed(ActionEvent e) {
            if (dc == null){
                dc = new NDoctor();}
            else dc.toFront();
        }
    });

Wszystko działa poprawnie, jednak jeśli wyłączę okno i będę chciał je uruchomić ponownie to nic się nie dzieje. Domyślam się, że problem leży w tym, że główne okno budowane jest za pomocą metody main, gdzie tworzony jest widok główny.
Powyższy listener uruchomi się jedynie raz, chyba, że ponownie wywołam metodę main, ale to sprawi ponowne utworzenie głównego widoku, a nie o to chodzi.

1

bez kodu nikt nie jest jasnowidzem. Kolejna sprawa

dc.toFront

nie ujawni okna "zamkniętego". Może lepiej dc.setVisible(true)

1

Jak napisał @rafal20-1988, użyj

dc.setVisible(true);

Ponadto w klasie NDoctor ustaw
setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);

1

no dobra ale **toFront **przesuwa na wierz okno które istnieje na ekranie a nie zamknięte okno

0

Panowie, macie racje ! aż mi głupio, że w tym tkwił błąd, nigdy bym nie przypuszczał, że tu leży pies pogrzebany ;)
Ja inaczej rozumiałem tego if'a mianowicie w pierwszej kolejności jest sprawdzane czy okno jest otwarte, jeśli nie to tworzony jest obiekt NDoctor.
Jeśli obiekt już istnieje, a ja kliknę w button, to przesunie mi na wierzch okno, które zostało wcześniej otwarte. Jeszcze raz sobie to prześledzę, dzięki ;)

1

Weź jeszcze po uwagę, że jeśli nie blokujesz przycisku po jego kliknięciu

newDoctorButton.setEnabled(false);

to może się zdarzyć, że użytkownik klika w momencie gdy okno nowego doktora jest widoczne, ale zminimalizowane.setVisible(true);

nie powiększy okna. 
Proponuję taki kod:
```java
        public void actionPerformed(ActionEvent e) {
            if (dc == null){
                dc = new NDoctor();}
            else if(dc.isVisible){
                dc.setExtendedState(NORMAL);
            }
            else{
                dc.setVisible(true);
            }
        }

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