Как открыть несколько окон одно за другим с помощью цикла? - PullRequest
0 голосов
/ 24 июня 2019

Я могу открыть несколько окон, используя цикл. Теперь я хочу открыть эти окна одно за другим. Это означает, что когда я закрываю одно окно, будет открыто следующее окно, я имею в виду, что до закрытия окна цикл будет остановлен.

Вот код

import java.awt.EventQueue;

import javax.swing.JFrame;

public class WindowOpener {

    private static final int WINDOW_COUNT = 5;

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                for (int i = 0; i < WINDOW_COUNT; i++) {
                    JFrame f = new JFrame();
                    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                    f.setSize(150, 250);
                    f.setVisible(true);
                }
            }
        });
    }
} 

Показывает 5 открытых окон одновременно.

Ответы [ 4 ]

2 голосов
/ 24 июня 2019

Во-первых, вы должны создать WindowListener.

WindowListener wl = new WindowListener() {
        @Override
        public void windowOpened(WindowEvent we) {
        }

        @Override
        public void windowClosing(WindowEvent we) {
        }

        @Override
        public void windowClosed(WindowEvent we) {
            //open new window
            JFrame f = new JFrame();
            f.setSize(150, 250);
            f.addWindowListener(this);
            f.setVisible(true);
        }

        @Override
        public void windowIconified(WindowEvent we) {
        }

        @Override
        public void windowDeiconified(WindowEvent we) {
        }

        @Override
        public void windowActivated(WindowEvent we) {
        }

        @Override
        public void windowDeactivated(WindowEvent we) {
        }
    };

В части WindowClosed вы открываете новое окно по своему усмотрению и добавляете в него WindowListener.Теперь, чтобы начать процесс, вы должны создать окно и добавить к нему этот слушатель.Как только вы закроете это, появится новое окно.Вы можете ограничить количество открывающихся окон переменной вне слушателя.

if(windowsLeft>0){
windowsLeft--;
//open window
}
0 голосов
/ 24 июня 2019

Вы можете добавить некоторую задержку при открытии каждого окна, если вы хотите открыть второе окно, если пользователь закроет первое окно, и открыть третье окно, если пользователь закроет второе окно, и так далее. Вы можете добавить событие окна в JFrame.

Рассмотрим следующий пример,

// OPEN WINDOW ON CLOSING OF OTHER
JFrame previous = null;
for (int i = 0; i < WINDOW_COUNT; i++) {
    final JFrame f = new JFrame();
    f.setSize(150, 250);
    if (Objects.nonNull(previous)) {
        previous.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent windowEvent) {
                f.setVisible(true);
            }
        });
    } else {
        f.setVisible(true);
    }
    previous = f;
}       
0 голосов
/ 24 июня 2019

Это работает.Он показывает одно окно за раз до WINDOW_COUNT раз и ждет открытия следующего окна, пока не закроется предыдущее.

private static final int WINDOW_COUNT = 5;

public static void main(String[] args) {
    createNewWindow(WINDOW_COUNT);
}


private static void createNewWindow(int count){

    if(count > 0) {

        JFrame f = new JFrame();

        if(count == 1)
            f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //exit the program after last  window is closed
        else
            f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); //don't exit the program until last window is closed

        f.setSize(150, 250);
        f.setVisible(true);
        f.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosed(WindowEvent e) {
                super.windowClosed(e);
                createNewWindow(count -1); //call on window closed event.
            }
        });

    }
}
0 голосов
/ 24 июня 2019

К, это должно сработать (Это для меня).Возможно, вам придется найти способ реинтеграции механизма подсчета.Также меня беспокоит аннотация для утилизации на близких

public static void main(String[] args) {
    createNewWindow();
}   
private static void createNewWindow(){  
    JFrame f = new JFrame();
    Dimension size = new Dimension(150, 250);
    f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    f.setSize(size);
    f.setPreferredSize(size);
    f.setVisible(true);
    f.pack();
    f.addWindowListener(new WindowAdapter() {        
        @Override
        public void windowClosed(WindowEvent e) {               
            while(f.isActive()) {}
            createNewWindow();            
        }        
    });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...