0

我写了一个简单的应用程序,我想用 JProgressBar 显示它的延迟 请帮助我;

我想用 Joptionpane 显示 JProgressBar ,带有一个取消按钮,它应该是模态的

这是我的源代码:

class CustomFrame extends JFrame {

  private JProgressBar progressBar;

  public CustomFrame() {
    long start = System.currentTimeMillis();
    myMethod();
    this.getContentPane().setLayout(null);
    this.setSize(200, 200);

    //JOptionPane. ?????

    this.setTitle("JFrame");
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    this.setVisible(true);
       long end = System.currentTimeMillis();
        System.out.print("\nTime: " + (end - start));
  }
    public void myMethod(){
        try {
                     java.io.File file = new java.io.File("i://m.txt");
                     BufferedReader input =
                       new BufferedReader(new FileReader(file));
                     String line;
                     while ((line = input.readLine()) != null) {
                         if (line.indexOf("CREATE KGCGI=") != -1 ){
                             System.out.println(line);
                         }
                     }
                     input.close();
                   }
                   catch(Exception e){
                       e.printStackTrace();
                   }
    } 

谢谢 ...

4

1 回答 1

3

要使其正常工作,您需要做几件事:

  1. 您应该注意 Swing 中的线程问题。您的 GUI 绘制应该在 EventDispatchThread 上完成,磁盘 I/O 应该在工作线程中完成。有关更多详细信息,请参阅本教程SwingWorker JavaDocSwingUtilities.invokeLater
  2. 然后,您将需要获取文件的大小 ( file.length()) 以确定如何确定进度条的范围 ( myProgressBar.setMaximum(length))
  3. 当您遍历文件中的行时,您将希望触发对进度条 ( myProgressBar.setValue(myProgressBar.getValue()+lineLength)) 的更新。

批评的几点:

  • 你的构造函数不应该去完成你所有的工作(即加载你的文件并弹出一个具有取消能力的选项窗格。构造函数应该只做创建对象所需的工作。你可能想考虑让你的构造函数创建您的类,然后将需要完成的工作单独调用,或者在类似init()方法的内部调用。
  • 目前尚不清楚您在使用JFrameas 超类做什么。 JOptionPane是一个会弹出一个带有一些文本的非常基本的模态对话框的类,可能是一个图标或输入字段。它不是嵌入在对话框中的面板。
  • 由于 JOptionPane 是用于创建基本消息对话框的非常基本的构造,因此使用 a 可能更容易JDialog,也可以将其设为模态。 JDialog将允许您随意添加按钮,而作为独立的JOptionPane将要求您使用是/否,或是/否/取消或确定/取消等。
  • 如果您仍然想使用JOptionPane,并且只显示一个取消按钮,您可以实例化 a JOptionPane(而不是使用实用show*方法),将进度条作为message,并将 theJOptionPane.CANCEL_OPTION作为optionType参数。您仍然需要将其放入 aJDialog中以使其可见。有关更多详细信息,请参阅本教程

JOptionPane(构造函数)

创建具有指定按钮、图标、消息、标题等的 JOptionPane。然后,您必须将选项窗格添加到 JDialog,在选项窗格上注册属性更改侦听器,然后显示对话框。有关详细信息,请参阅停止自动关闭对话框。

于 2010-02-17T07:27:14.137 回答