剛剛看了幾篇文檔,對GEF中的POLICY的位置有了更清楚的理解。
POLICY有幾種類型:NOTEPOLICY,COMPONENTPOLICY,LAYOUTPOLICY;分別對應REQUEST的幾種類型,一旦出現REQUEST就在EDITPART里面找相應的POLICY,然后在POLICY中執行COMMAND。當然要給COMMAND傳遞一定的參數,比如MODEL,CONSTRAINT等等
調用POLICY的GETCOMMAND()函數,得到相應的一個或多個COMMAND,然后分別執行,這樣就改變了MODEL。
最后在EDITPART里面添加監聽器:
abstract public class EditPartWithListener extends AbstractGraphicalEditPart implements

PropertyChangeListener
{


public void activate()
{
super.activate();
// It registers with a model by making self into listeners.
((AbstractModel) getModel()).addPropertyChangeListener(this);
}


public void deactivate()
{
super.deactivate();
// It deletes from a model.
((AbstractModel) getModel()).removePropertyChangeListener(this);
}

}
然后,HelloEditPart 要派生自這個抽象類,然后在模型改變時刷新視圖。注意這里用到了
前面設置的變量P_CONSTRAINT。通過這個變量我們才知道是要改變HelloModel 模型的約束.

public class HelloEditorPart extends EditPartWithListener
{

public void propertyChange(PropertyChangeEvent event)
{
// the model of change shows change of the position information on a model -- do thing or not?
if (event.getPropertyName().equals(HelloModel.P_CONSTRAINT))
refreshVisuals(); // A view is updated.
}
}
這樣就能改變VIEW了!
REQUEST-->POLICY-->COMMAND-->MODEL-->VIEW
^_^
POLICY有幾種類型:NOTEPOLICY,COMPONENTPOLICY,LAYOUTPOLICY;分別對應REQUEST的幾種類型,一旦出現REQUEST就在EDITPART里面找相應的POLICY,然后在POLICY中執行COMMAND。當然要給COMMAND傳遞一定的參數,比如MODEL,CONSTRAINT等等
調用POLICY的GETCOMMAND()函數,得到相應的一個或多個COMMAND,然后分別執行,這樣就改變了MODEL。
最后在EDITPART里面添加監聽器:






















然后,HelloEditPart 要派生自這個抽象類,然后在模型改變時刷新視圖。注意這里用到了
前面設置的變量P_CONSTRAINT。通過這個變量我們才知道是要改變HelloModel 模型的約束.











這樣就能改變VIEW了!
REQUEST-->POLICY-->COMMAND-->MODEL-->VIEW
^_^