具体要求如下,窗体都是jframe,主窗体中有n个复选框,每个复选框对应一个窗体,勾选完以后,点击按钮,根据是否选中复选框,依次按顺序从上到下将复选框的窗体弹出,要求在前一个窗体关闭后,才能弹出下一个窗体。
这个机制如何实现?

解决方案 »

  1.   

    编写自己的一个窗口类,并且添加对应的window listener 当窗口关闭的时候弹出下个窗口就可以啦.
    自己的窗口类存在这样一个构造函数. MyWindow(...param,MyWindow nextWindow)
      

  2.   

    参考下下面代码.写得比较凌乱写.import javax.swing.*;
    import java.awt.event.*;
    import java.awt.*;
    import java.util.ArrayList;public class Test{
    public static void main(String[] args){
    SwingUtilities.invokeLater(new Runnable(){
    @Override
    public void run(){
    createWindow();
    }
    });
    } private static void createWindow(){
    JFrame window = new JFrame("Window");
    window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    Toolkit toolkit = Toolkit.getDefaultToolkit();
    Dimension screenSize = toolkit.getScreenSize();
    window.setSize(screenSize.width / 2,screenSize.height / 2);
    window.setLocationRelativeTo(null);
    Container content = window.getContentPane();
    content.setLayout(new FlowLayout());
    int total = 5;
    JCheckBox[] checkboxs = new JCheckBox[total];
    ArrayList<MyDialog> dialogs = new ArrayList<>();
    for(int i = 0 ;  i < total ; i ++){
    checkboxs[i] = new JCheckBox("弹出对话窗口:" + (i + 1));
    checkboxs[i].addActionListener(new ActionListener(){
    @Override
    public void actionPerformed(ActionEvent event){
    JCheckBox checkbox = (JCheckBox)(event.getSource());
    if(checkbox.isSelected()){
    dialogs.add(new MyDialog(window,checkbox.getText()));
    for(int j = 0 ; j < dialogs.size() - 1; j ++){
    dialogs.get(j).setNext(dialogs.get(j + 1));
    }
    }else{
    dialogs.remove(new MyDialog(window,checkbox.getText()));
    for(int j = 0 ; j < dialogs.size() - 1; j ++){
    dialogs.get(j).setNext(dialogs.get(j + 1));
    }
    }
    }
    });
    content.add(checkboxs[i]);
    } JButton button = new JButton("start");
    button.addActionListener(new ActionListener(){
    @Override
    public void actionPerformed(ActionEvent event){
    if(dialogs.size() == 0){
    return;
    }
    dialogs.get(0).setVisible(true);
    }
    });
    content.add(button);
    window.setVisible(true);
    }
    } class MyDialog extends JDialog{
    public MyDialog(Frame owner,String title){
    super(owner,title);
    setSize(200,200);
    addWindowListener(new WindowAdapter(){
    @Override
    public void windowClosing(WindowEvent event){
    dispose();
    if(next == null){
    return;
    }
    next.setVisible(true);
    }
    });
    } public void setNext(MyDialog next){
    this.next = next;
    } @Override
    public boolean equals(Object obj){
    if(!(obj instanceof MyDialog)){
    return false;
    }
    MyDialog dialog = (MyDialog)obj;
    return dialog.getTitle() == getTitle();
    }
    private MyDialog next;
    }
      

  3.   

    上面代码有点小bug.去掉复选框钩的时候需要设置最后一个弹出窗口的next对象为null.需要加上如下代码:if(dialogs.size() > 0){
    dialogs.get(dialogs.size() - 1).setNext(null);
    }