2015-07-11 120 views
0

我已經創建了這個進度代碼,現在我希望它在打開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)使用合乎邏輯的一致形式縮進代碼行和塊。縮進旨在使代碼的流程更易於遵循! –

回答

1

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

進度

在你的代碼,而進步增加休息被凍結。如果你想避免它,在另一個線程中有進度條代碼是很好的。但請記住使用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