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 JavaDoc、およびSwingUtilities.invokeLaterを参照してください。
  2. 次に、ファイルのサイズを取得して ( file.length())、プログレス バーのスコープを決定する方法を決定します ( myProgressBar.setMaximum(length)) 。
  3. ファイル内の行を繰り返し処理するときは、進行状況バー ( myProgressBar.setValue(myProgressBar.getValue()+lineLength)) の更新をトリガーする必要があります。

批評としてのいくつかのポイント:

  • コンストラクターは、オフになってすべての作業を行うべきではありません (つまり、ファイルをロードし、キャンセルする機能を備えたオプション ペインをポップアップします。コンストラクターは、オブジェクトの作成に必要な作業だけを行う必要があります。コンストラクターはクラスを作成し、実行する必要がある作業を個別に、またはinit()メソッドのようなもの内で呼び出すようにします。
  • スーパークラスとして何をしているのかは明確ではありませんJFrameJOptionPaneアイコンまたは入力フィールドなどのテキストを含む非常に基本的なモーダル ダイアログをポップアップするクラスです。ダイアログに埋め込まれたパネルではありません。
  • JOptionPane は基本的なメッセージ ダイアログを作成するための非常に基本的な構造であるため、JDialogモーダルにすることもできる を使用する方が簡単な場合があります。 スタンドアロンでは、はい/いいえ、はい/いいえ/キャンセル、OK/キャンセルなどを使用する必要がありますがJDialog、好きなようにボタンを追加できます。JOptionPane
  • それでも を使用しJOptionPane、キャンセル ボタンのみを表示する場合は、JOptionPane(ユーティリティshow*メソッドを使用するのではなく) をインスタンス化し、プログレスバーをmessage、パラメータJOptionPane.CANCEL_OPTIONとしてを使用できます。optionTypeこれを表示するには、これを に入れる必要がありJDialogます。詳細については、このチュートリアルを参照してください。

JOptionPane (コンストラクター)

指定されたボタン、アイコン、メッセージ、タイトルなどで JOptionPane を作成します。次に、オプション ペインを JDialog に追加し、プロパティ変更リスナーをオプション ペインに登録して、ダイアログを表示する必要があります。詳細については、ダイアログの自動クローズの停止を参照してください。

于 2010-02-17T07:27:14.137 に答える