Java 如何使用循环逐个打开多个窗口?

Java 如何使用循环逐个打开多个窗口?,java,swing,Java,Swing,我可以使用循环打开多个窗口。 现在我想一个接一个地打开这些窗口。这意味着当我关闭一个窗口时,下一个窗口将被打开,我的意思是,直到关闭一个窗口,循环将停止 这是密码 import java.awt.EventQueue; import javax.swing.JFrame; public class WindowOpener { private static final int WINDOW_COUNT = 5; public static void main(String

我可以使用循环打开多个窗口。 现在我想一个接一个地打开这些窗口。这意味着当我关闭一个窗口时,下一个窗口将被打开,我的意思是,直到关闭一个窗口,循环将停止

这是密码

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);
                }
            }
        });
    }
} 
导入java.awt.EventQueue;
导入javax.swing.JFrame;
公共类开窗器{
私有静态最终整数窗口计数=5;
公共静态void main(字符串[]args){
invokeLater(新的Runnable(){
公开募捐{
对于(int i=0;i

一次显示5个打开的窗口。

首先,您必须创建一个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
}

首先,您必须创建一个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
}

这很有效。它一次显示一个窗口,最多显示窗口计数次数,并等待打开下一个窗口,直到上一个窗口关闭

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.
            }
        });

    }
}

这很有效。它一次显示一个窗口,最多显示窗口计数次数,并等待打开下一个窗口,直到上一个窗口关闭

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.
            }
        });

    }
}

为什么?这样做有什么意义?最简单的解决方案是使用模态JDialog。然后循环代码将等待每个对话框关闭。与@camickr问题同时出现的是,这似乎是一个XY问题,可以通过多种不同的方式更好地解决。1) 看2)为什么?这样做有什么意义?最简单的解决方案是使用模态JDialog。然后循环代码将等待每个对话框关闭。与@camickr问题同时出现的是,这似乎是一个XY问题,可以通过多种不同的方式更好地解决。1) 见2)见