我需要关于Java JFrame上的一些东西的帮助

问题描述:

我已经创建了这个进度代码,现在我希望它在打开100%后自动关闭,并在框架中打开一个带有文本的新框架。那么,我该如何做到这一点?我需要关于Java JFrame上的一些东西的帮助

import java.awt.*; 
import javax.swing.*; 
import java.awt.event.*; 
import java.sql.*; 
import java.util.*; 
class Progress extends JFrame implements ActionListener { 

    JProgressBar pb; 
    JButton b1; 
    Progress() { 
     super("Progress"); 
     setLayout(null); 
     b1 = new JButton("Start"); 
     b1.setBackground(Color.LIGHT_GRAY);    
     pb = new JProgressBar(1,100); 
     pb.setValue(0); 
     pb.setStringPainted(true); 
     pb.setForeground(Color.green); 
     pb.setBackground(Color.pink); 
     b1.setBounds(20, 20, 80, 25); 
     pb.setBounds(110, 20, 200, 25); 
     pb.setVisible(false); 
     add(b1); 
     add(pb);    
     b1.addActionListener(this); 
     setResizable(false); 
     setDefaultCloseOperation(EXIT_ON_CLOSE); 
    } 

    public void actionPerformed(ActionEvent e) { 
     int i=0; 
     if(e.getSource()==b1) { 
      pb.setVisible(true); 
      try { 
       while(i<=100) { 
        Thread.sleep(50); 
        pb.paintImmediately(0, 0, 200, 25); 
        pb.setValue(i); 
        i++; 
       } 
      } catch(Exception e1) { 
       System.out.print("Caughted exception is ="+e1); 
      } 
     } 
    } 

    public static void main(String arg[]) { 
     logindemo m=new logindemo(); 
     m.setSize(400,250); 
     m.setVisible(true); 
     Dimension dimension = Toolkit.getDefaultToolkit().getScreenSize(); 
     int x = (int) ((dimension.getWidth() - m.getWidth())/2); 
     int y = (int) ((dimension.getHeight() - m.getHeight())/2); 
     m.setLocation(x, y); 
    } 
} 

这是我的进度条代码。

+3

什么是你的代码,你的问题标题之间的关系? – Karthik

+1

参见[使用多个JFrames,好/坏实践?](http://stackoverflow.com/q/9554636/418556) –

+1

'setLayout(null);'1)Java GUI必须在不同的OS上工作,屏幕尺寸,屏幕分辨率等,使用不同的地区不同的PLAF。因此,它们不利于像素的完美布局。请使用布局管理器或[它们的组合](http://stackoverflow.com/a/5630271/418556)以及[white space]的布局填充和边框(http://stackoverflow.com/a/17874718/ 418556)。 2)使用合乎逻辑的一致形式缩进代码行和块。缩进旨在使代码的流程更易于遵循! –

所以一件事情在答案之前。应用程序的

进度

在你的代码,而进步增加休息被冻结。如果你想避免它,在另一个线程中有进度条代码是很好的。但请记住使用SwingWorker而不是传统的线程。

还读了安德鲁汤普森在他的评论中提到的东西。

“关闭”或者说隐藏主帧u可以调用这些方法

setVisible(false); 

dispose(); 

一个要打开新的窗口/帧或什么的,你必须把它放在后while循环。你可以用下面的代码来检查它,只需将这个方法添加到你的类中并在循环之后调用它。

private void dialogMessage() { 
    Object[] options = {"OK"}; 
    int result = JOptionPane.showOptionDialog(this, 
      "Done!", "", 
      JOptionPane.OK_OPTION, JOptionPane.QUESTION_MESSAGE, 
      null, 
      options, 
      options[0]); 
    if (result == JOptionPane.OK_OPTION) { 
     System.exit(0); 
    } 
} 

要了解更多有关的JOptionPane看看这个链接How to Make Dialogs