如何在java中实现依次弹出窗体? 具体要求如下,窗体都是jframe,主窗体中有n个复选框,每个复选框对应一个窗体,勾选完以后,点击按钮,根据是否选中复选框,依次按顺序从上到下将复选框的窗体弹出,要求在前一个窗体关闭后,才能弹出下一个窗体。这个机制如何实现? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 编写自己的一个窗口类,并且添加对应的window listener 当窗口关闭的时候弹出下个窗口就可以啦.自己的窗口类存在这样一个构造函数. MyWindow(...param,MyWindow nextWindow) 参考下下面代码.写得比较凌乱写.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; } 上面代码有点小bug.去掉复选框钩的时候需要设置最后一个弹出窗口的next对象为null.需要加上如下代码:if(dialogs.size() > 0){ dialogs.get(dialogs.size() - 1).setNext(null);} 对话框的隐藏或者关闭 求高手解答命令符模式下的问题 JAVABEAN是什么? 可以在哪一些场合下用呢? Thread sleep 使用问题。 io流的一道代码填空题目,大家帮忙看一下~~~ 仍然是错误 非常简单的问题!!!两个frame之间怎样传递参数? 谁能讲讲,为何在此等待键盘输入??????????? 要对任意的acess数据库进行管理 萌新安装jdk! java多线程两种实现方式问题 JDBC连接数据库问题 新人求教!!大神们进来看看
自己的窗口类存在这样一个构造函数. MyWindow(...param,MyWindow nextWindow)
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;
}
dialogs.get(dialogs.size() - 1).setNext(null);
}