2012-02-28 9 views
2

私はProgressMonitorウィンドウが(2秒後、必要ならば)自己起動され、開いているときには何も制御していないので、これを行う方法はわかりません。したがって、バックグラウンドで開く方法を手がかりにしていないので、フォーカスはメインのJFrameにとどまります。メインJFrameにフォーカスを当てずにProgressMonitorウィンドウを使用するには?

MyFile file = panel.getFilesystem().getFile(panel.getDirectory()+fileName); 
if(file.isDirectory()){ 
    final ProgressMonitor monitor = new ProgressMonitor((Component)event.getSource(), 
      "Determining the size of "+file.getName(), "Initializing...", 0, 100); 
    monitor.setMillisToPopup(500); 
    monitor.setMillisToDecideToPopup(200); 
    final DirectorySizeWorker worker = new DirectorySizeWorker(file, table, monitor, table.getSelectedRow(), 2); 
    worker.execute(); 
    worker.addPropertyChangeListener(
      new PropertyChangeListener() { 
       public void propertyChange(PropertyChangeEvent event) { 
        if ("progress".equals(event.getPropertyName())) { 
         monitor.setProgress((Integer)event.getNewValue()); 
         monitor.setNote((Integer)event.getNewValue() + "% completed"); 
        } 
        if("state".equals(event.getPropertyName())){ 
         monitor.close(); 
        } 
       } 
      }); 
} 

monitorworkerの監視動作です。 workerSwingWorkerの実装であり、fileサイズを使用しています(この特定のケースではファイルがディレクトリなので、長時間かかることがあると思われ、SwingWorkerを使用すると仮定します)monitorは、進捗状況に関する通知。問題は、このウィンドウに焦点を当てて、私はむしろバックグラウンドで開くことが好きなので、ユーザーはファイルをブラウズできます(プログラムは単純なファイルマネージャです)。ダイアログボックスの親コンポーネント

ダイアログは、それが表示されているときは、フォーカスを返す必要がフォーカスを持っています -

parentComponent

+1

私は魔法の8ボールを手に入れましょう。あなたはコードを書いておらず、アプリケーション構造の詳細な説明も載せていませんが、何を意味するのかが分かっています。私たちは霊的ではありません - 実際の問題を示すコードのセクションを投稿してください。 – mcfinnigan

答えて

3

ProgressMonitor(parentComponent, message, note, min, max)

却下されたとき、または目に見えないときに親に送信する。

+0

これは今のところこのように動作します。ダイアログが閉じられたときに(ダイアログが閉じられたとき、または 'worker'が終了した後に' monitor.close() 'によって自動的に) 。私の要点は:(タスクバー上でそれを選択しない限り)ダイアログを集中させないということです。 – Wojtek

+0

OKですが、これを閉じるためのいくつかの便利なメソッドとボタンのほかに、メインUIの 'JProgressBar'の上に' ProgressMonitor'を使う利点は何ですか?必要に応じて表示/非表示に設定されていますか? –

+0

さて、最初の利点は明らかにシンプルさでした。数行のコードで十分でした。第2に、別のウィンドウで開くことを好みます。なぜなら、各タスクのプログレスバーを別々に保持することができるからです。メインUIにそれらを保存すると、多数のプログレスバーのために煩雑になる可能性があります(たとえば、コピー&ペーストタスクの並行処理)。私はこのシンプルさが私に逆らってしまったのではないかと心配しています。結局私は自分自身のダイアログウィンドウを作らなければなりません。 – Wojtek

関連する問題