1 建立轉發器? 即控制層??
Controller.控制層主要是有兩個類來實現。一個是dispatcher、controller。兩者是一個一對多的關系。一個
dispatcher中有多個controller。dispatcher通過addController方法來添加控制器。我們一般在new
controller的時候,把相應需要添加的事件轉發添加進去,采用的是registerEventTypes(AppEvents.INIT);方
法。即controller中存在一個LIST來維護所有需要處理的事件。
???????????????
?? 2. 轉發調用時候。
??????????? 3.1 采用dispatcher的dispatch(int appEvent)。該方法就從自身維護的控制器集合中取得對應appEvent的controller(控制器),并調用他的handEvent方法,最后觀察者會將該事件取消。
??????????? 3.2
進入crontoller的handEvent方法。這個方法需要我們子類來覆蓋,一般是根據該controller的不同事件(在構造時候加入的事
件),調用不同的方法。比如說onInit()方法,在此方法中我們一般需要調用的是controller類的
??????????? 3.3 forwardToView(appView, event);這個方法就是要我們來展現頁面了。傳入的appView就是需要我們定義的頁面來展現.
??????????? 3.4 這個forwardToView方法首先會調用view的初始化方法 initialize(),所以對頁面的是初始化操作可以在該方法中進行。最后調用view的handView方法。這個方法就是我們最后的操作了。
???????????
??????????? 例如:
???????????????? viewport = new Viewport();
??????? viewport.setLayout(new BorderLayout());
???????
??????? createNorth();
??????? createWest();
??????? createCenter();
??????? createSouth();
???????
??????? Registry.register("viewport", viewport);
??????? Registry.register("north", north);
??????? Registry.register("south", south);
??????? Registry.register("west", west);
??????? Registry.register("center", center);
???????
??????? viewport.sinkEvents(Events.OnKeyDown);
??????? viewport.addListener(Events.OnKeyDown, new AppKeyNav());
???????
??????? RootPanel.get().add(viewport);??????? //這就是把頁面給展現出來。