data bindingのTreeViewerのtips
JFace data bindingフレームワークを使うと、モデルの変更と同時にビューも自動的に変更されるようになります。TreeViewerの場合、バインディングしたモデルに、子要素を追加したときにツリーの再構築が行われるのですが、「要素を開いた状態(expanded)」は失われてしまい、全て閉じられたツリーが表示されてしまいます。以下のコードで、「要素を開いた状態(expanded)」を保持して復元うすることができます。elementsが「要素を開いた状態(expanded)」、selectionが「選択状態」を保持・復元しています。
「tree.setRedraw」は画面の描画を一時的に停止して、ちらつきを無くしています。これがないと、ツリーがせわしく開いてしまうのです。
以上、ニーズは少ないかもしれませんがTipsでした。
public void run() { try { tree.setRedraw(false); Object[] elements = treeViewer.getExpandedElements(); ISelection selection =treeViewer.getSelection(); ... なんらかのモデルに対する処理、例えば子要素の追加 treeViewer.setExpandedElements(elements); treeViewer.setSelection(selection); } finally { tree.setRedraw(true); } }