自动关闭第二个Swing JFrame

时间:2018-07-21 08:59:55

标签: java swing jframe

我在1个文件中创建了2个类。一个指的是记事本,第二个指的是加载屏幕progressBar

但是,当我尝试执行它时,进度条框架仍保留在屏幕上,并且仅当我按下关闭按钮时才会关闭。我想自动关闭进度条,而不是在其100%而不是其他帧之后未按下该关闭按钮。

public class swingNotePad extends MouseAdapter implements ActionListener,MouseListener{
JFrame f;
JTextArea txt;
JMenuBar mb;
JMenu m1,m2,m3,m4,m5;
JMenuItem mi1,mi2,mi3,mi4,mi5,mi6,mi7,mi8;
JPopupMenu pm;
JSeparator js,js2;
public void MethodswingNotePad(){
     f=new JFrame("Developed by UC");
     txt=new JTextArea();
     txt.setBounds(0,0,600,570);
     js=new JSeparator();                                                              
     mb=new JMenuBar();
     m1=new JMenu("File");
     js2=new JSeparator(SwingConstants.VERTICAL);
     m2=new JMenu("Edit");
     m3=new JMenu("Format");
     m4=new JMenu("View");
     m5=new JMenu("Help");
     mi1=new JMenuItem("Cut");
     mi2=new JMenuItem("Copy");
     mi3=new JMenuItem("Paste");
     mi4=new JMenuItem("Select All");
     mi5=new JMenuItem("cut");
     mi6=new JMenuItem("copy");
     mi7=new JMenuItem("paste");
     mi8=new JMenuItem("select all");
     m2.add(mi1);
     m2.addSeparator();
     m2.add(mi2);
     m2.addSeparator();
     m2.add(mi3);
     m2.addSeparator();
     m2.add(mi4);
     mi1.addActionListener(this);
     mi2.addActionListener(this);
     mi3.addActionListener(this);
     mi4.addActionListener(this);

     pm=new JPopupMenu();
     pm.add(mi5);pm.add(mi6);pm.add(mi7);pm.add(mi8);

     mb.add(m1);

    mb.add(m2);
    mb.add(m3);
    mb.add(m4);
    mb.add(m5);
     f.add(txt);f.add(pm);   
     f.setJMenuBar(mb);
     f.setSize(600,600);
     f.setLayout(null);
     f.setVisible(true);
     f.setDefaultCloseOperation(EXIT_ON_CLOSE);
 }
public void actionPerformed(ActionEvent e){
    if(e.getSource()==mi1){
        txt.cut();
    }
    if(e.getSource()==mi2){
        txt.copy();
    }
    if(e.getSource()==mi3){
        txt.paste();
    }
    if(e.getSource()==mi4){
        txt.selectAll();
    }
}
public static void main(String...args){
swingNotePad a=new swingNotePad();     
swingProgressBar2 obj=new swingProgressBar2();
obj.iterate();
a.MethodswingNotePad();
 }

 }



class swingProgressBar2 extends JFrame{
JProgressBar pb;
JLabel l;
int i=0,n=0;
swingProgressBar2(){
    pb=new JProgressBar(0,2000);
    pb.setBounds(50,60,150,40);
    l=new JLabel("Loading...");
    l.setBounds(120,20,100,20);
    add(pb);add(l);
    pb.setStringPainted(true);
    pb.setValue(0);
    setSize(300,300);
    setLayout(null);
    setVisible(true);
    setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    if(i==2000){
        System.exit(0) ;   }
}
public void iterate(){
    while(i<2001){
        try{
            i+=100;
            pb.setValue(i);
            Thread.sleep(75);

        }
        catch(Exception e){
            System.out.println(e);
        }
    }   
    }
}

1 个答案:

答案 0 :(得分:0)

您不能在构造函数中System.exit(0)。该代码完成后,甚至不会开始迭代。尝试将代码放入迭代方法中。并使用dispose()代替,因为System.exit(0)将退出整个应用程序。

例如

public void iterate(){
 while(i<2001){
  try{
   i+=100;
   pb.setValue(i);
   Thread.sleep(75);

  }catch(Exception e){
   System.out.println(e);
  }
 }   
 dispose();
}