バックグラウンドスレッドからGEFモデルを更新する
-
07-07-2019 - |
質問
GEFのモデルを更新し、作成したビューに変更を表示しようとしています。現在、私が行った変更はビューに反映されていません。モデルを更新するために次のアプローチを使用しており、その正しいアプローチを取るかどうか疑問に思っています:
Display.getDefault().asyncExec(new Runnable() {
public void run() {
String viewId = "beat.views.BeatView";
IWorkbench workbench = PlatformUI.getWorkbench();
IWorkbenchWindow mainWindow = workbench
.getActiveWorkbenchWindow();
try {
BeatView view = (BeatView) mainWindow.getActivePage()
.showView(viewId);
BeatEditPart beatEditPart = (BeatEditPart)view.getGraphicalViewer().getContents();
BeatModel beatModel = (BeatModel)beatEditPart.getModel();
beatModel.setObjects(model);
} catch (PartInitException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
解決
EditPartはモデルの変更を聞いていますか?
1-モデルのリスナーとして登録する必要があります。 EMFの通知メカニズムを使用します。
public void activate() {
if (!isActive())
((EObject) getModel()).eAdapters().add(this);
super.activate();
}
public void deactivate() {
if (isActive())
((EObject) getModel()).eAdapters().remove(this);
super.deactivate();
}
2-何かが変わったときに行動する必要があります。
public void notifyChanged(Notification notification) {
...
}
所属していません StackOverflow