SwingWorker

トップ > チップス > SwingWorker
2012-02-13, swing_worker

/tips/java/swing/swing_worker Swingによる開発を行う上で、イベントディスパッチスレッドに関するルールは非常に重要です。これまで、バックグラウンドで実行されるスレッドの中からコンポーネントを更新したい場合は、SwingUtilities.invokeLatorなどを使っていましたが、スレッドの中のあちこちに2重にRunnableインタフェースが乱立するため、コードの見栄えが悪くなる問題がありました。SwingWorkerを使用すると、よりスマートにバックグラウンド処理(とその通知)を実装することができます。

**テーブルモデルを更新する JDKのドキュメント中に例示されているテーブルモデル更新のサンプルです。

:class TableSwingWorker extends : SwingWorker { : private final DefaultTableModel tableModel; : : public TableSwingWorker(DefaultTableModel tableModel) { : this.tableModel = tableModel; : } : : @Override : protected DefaultTableModel doInBackground() throws Exception { : // In the Other Thread. : for (Object[] row = loadData(); ! isCancelled() && row != null; row = loadData()) { : publish((Object[]) row); : } : return tableModel; : } : : @Override : protected void process(List chunks) { : // In the Event Dispatching Thread. : for (Object[] row : chunks) { : tableModel.addRow(row); : } : } :}

この記事は役に立ちましたか?