Swing/ProgressMonitor のバックアップソース(No.7)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - 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)
TITLE:ProgressMonitorで処理の進捗を表示 #navi(../) #tags(ProgressMonitor, SwingWorker, PropertyChangeListener, JProgressBar) RIGHT:Posted by &author(aterai); at 2010-02-15 * ProgressMonitorで処理の進捗を表示 [#qfcff5da] ``ProgressMonitor``で処理の進捗を表示します。 - &jnlp; - &jar; - &zip; #ref(https://lh6.googleusercontent.com/_9Z4BYR88imo/TQTRQXIAu4I/AAAAAAAAAg4/bh8niw_k5AE/s800/ProgressMonitor.png) ** サンプルコード [#fd3db85b] #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()) { //while(current<lengthOfTask && !monitor.isCanceled()) { 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] 上記のサンプルでは、``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) { String strPropertyName = e.getPropertyName(); if("progress".equals(strPropertyName)) { monitor.setProgress((Integer)e.getNewValue()); if(monitor.isCanceled()) { ((SwingWorker)e.getSource()).cancel(true); } } } } }} ** 参考リンク [#r9011528] - [http://docs.oracle.com/javase/tutorial/uiswing/components/progress.html How to Use Progress Bars (The Java™ Tutorials)] - [[ProgressMonitorがダイアログを表示までの待ち時間>Swing/MillisToDecideToPopup]] ** コメント [#p0a19264] #comment