Swing/ProgressMonitor のバックアップ差分(No.10)
- バックアップ一覧
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- バックアップ を表示
- Swing/ProgressMonitor へ行く。
- 1 (2010-02-18 (木) 11:09:05)
- 2 (2010-02-27 (土) 02:49:02)
- 3 (2010-05-11 (火) 20:52:39)
- 4 (2011-04-03 (日) 04:36:06)
- 5 (2013-01-02 (水) 14:30:06)
- 6 (2013-04-15 (月) 03:02:59)
- 7 (2013-09-16 (月) 20:05:12)
- 8 (2014-12-19 (金) 14:10:44)
- 9 (2016-03-11 (金) 15:59:44)
- 10 (2017-04-04 (火) 14:17:08)
- 11 (2017-07-20 (木) 14:11:00)
- 12 (2018-07-18 (水) 15:56:58)
- 13 (2020-07-16 (木) 16:48:10)
- 14 (2021-12-16 (木) 09:53:20)
- 15 (2022-08-05 (金) 14:01:37)
- 追加された行はこの色です。
- 削除された行はこの色です。
--- category: swing folder: ProgressMonitor title: ProgressMonitorで処理の進捗を表示 tags: [ProgressMonitor, SwingWorker, PropertyChangeListener, JProgressBar] author: aterai pubdate: 2010-02-15T14:18:06+09:00 description: ProgressMonitorで処理の進捗を表示します。 image: https://lh6.googleusercontent.com/_9Z4BYR88imo/TQTRQXIAu4I/AAAAAAAAAg4/bh8niw_k5AE/s800/ProgressMonitor.png --- * 概要 [#qfcff5da] * 概要 [#summary] `ProgressMonitor`で処理の進捗を表示します。 #download(https://lh6.googleusercontent.com/_9Z4BYR88imo/TQTRQXIAu4I/AAAAAAAAAg4/bh8niw_k5AE/s800/ProgressMonitor.png) * サンプルコード [#fd3db85b] * サンプルコード [#sourcecode] #code(link){{ final ProgressMonitor monitor = new ProgressMonitor( this, "message", "note", 0, 100); monitor.setProgress(0); worker = new SwingWorker<String, String>() { @Override public String doInBackground() { int current = 0; int lengthOfTask = 120; //list.size(); while (current < lengthOfTask && !isCancelled()) { try { Thread.sleep(50); } catch (InterruptedException ie) { return "Interrupted"; } setProgress(100 * current / lengthOfTask); publish(current + "/" + lengthOfTask); current++; } return "Done"; } @Override protected void process(java.util.List<String> chunks) { for (String message : chunks) { monitor.setNote(message); } } @Override public void done() { runButton.setEnabled(true); monitor.close(); String text = null; if (isCancelled()) { text = "Cancelled"; } else { try { text = get(); } catch (Exception ex) { ex.printStackTrace(); text = "Exception"; } } //System.out.println(text); area.append(text + "\n"); area.setCaretPosition(area.getDocument().getLength()); //appendLine(text); } }; worker.addPropertyChangeListener(new ProgressListener(monitor)); worker.execute(); }} * 解説 [#x1f15ca5] * 解説 [#explanation] 上記のサンプルでは、`SwingWorker`を使ったタスクの進捗状態を`ProgressMonitor`で表示しています。 ---- `ProgressListener`は、`Tutorial`の[http://docs.oracle.com/javase/tutorial/uiswing/examples/components/ProgressMonitorDemoProject/src/components/ProgressMonitorDemo.java ProgressMonitorDemo.java]を変更して使用しています。 #code{{ class ProgressListener implements PropertyChangeListener { private final ProgressMonitor monitor; public ProgressListener(ProgressMonitor monitor) { this.monitor = monitor; this.monitor.setProgress(0); } @Override public void propertyChange(PropertyChangeEvent e) { Object o = e.getSource(); String strPropertyName = e.getPropertyName(); if ("progress".equals(strPropertyName)) { if ("progress".equals(strPropertyName) && o instanceof SwingWorker) { SwingWorker task = (SwingWorker) o; monitor.setProgress((Integer) e.getNewValue()); if (monitor.isCanceled()) { ((SwingWorker) e.getSource()).cancel(true); if (monitor.isCanceled() || task.isDone()) { task.cancel(true); } } } } }} * 参考リンク [#r9011528] * 参考リンク [#reference] - [http://docs.oracle.com/javase/tutorial/uiswing/components/progress.html How to Use Progress Bars (The Java™ Tutorials)] - [[ProgressMonitorがダイアログを表示するまでの待ち時間>Swing/MillisToDecideToPopup]] -- 処理時間が短くて`ProgressMonitor`が表示されない場合などについて -- 処理時間が短くて`ProgressMonitor`が表示されない場合の待ち時間をテスト * コメント [#p0a19264] * コメント [#comment] #comment #comment