Скачать презентацию Kurz 4 IT 115 od ZS 2015 3 Скачать презентацию Kurz 4 IT 115 od ZS 2015 3

4IT115NPrepinaniBarevObserver.pptx

  • Количество слайдов: 12

Kurz 4 IT 115 od ZS 2015 3. cvičení Další komponenty Gui Návrhový vzor Kurz 4 IT 115 od ZS 2015 3. cvičení Další komponenty Gui Návrhový vzor Observer Alena Buchalcevová katedra informačních technologií Vysoká škola ekonomická v Praze buchalc@vse. cz

Projekt Prepinani. Barev. FX_List 2 Kurz 4 IT 115 cvičení ©Alena Buchalcevová Projekt Prepinani. Barev. FX_List 2 Kurz 4 IT 115 cvičení ©Alena Buchalcevová

Diskuse k řešení § § Na volbě Radio. Buttonu závisí § změna barvy pozadí Diskuse k řešení § § Na volbě Radio. Buttonu závisí § změna barvy pozadí v panelu dolu § změna seznamu barev Mohli bychom chtít přidat ještě další závislé objekty V tomto řešení jsou objekty přímo uvedeny v ovladači – těsná vazba Musíme také přesně vědět, co dělat – jednou voláme set. Style, podruhé metodu add cervena. Radio. B. set. On. Action(new Event. Handler() { @Override public void handle(Action. Event event) { dolni. Flow. Pane. set. Style("-fx-background-color: red; "); barvy. Data. add("červená"); }); 3 modra. Radio. B. set. On. Action(new Event. Handler() { @Override public void handle(Action. Event event) { dolni. Flow. Pane. set. Style("-fx-background-color: blue; "); barvy. Data. add("modrá"); }); Kurz 4 IT 115 cvičení ©Alena Buchalcevová

Návrhový vzor Observer Problém: Na stavu jednoho objektu závisí jiné objekty. Jakmile se změní Návrhový vzor Observer Problém: Na stavu jednoho objektu závisí jiné objekty. Jakmile se změní stav tohoto objektu, všechny na něm závislé je třeba informovat § Objekty by měly být volně vázané – to znamená, že objekt, který změní svůj stav a bude o tom informovat ostatní, by neměl být závislý na jejich vnitřním uspořádání. § Objekty, které budou přijímat informace o změně stavu, nemusí být předem známy. Řešení: Objekt, který mění svůj stav, subjekt posílá informaci těm, kteří se u něj zaregistrovali jako pozorovatelé – observer. Každý pozorovatel musí mít definovánu speciální metodu update, kterou subjekt volá. 4 Kurz 4 IT 115 cvičení ©Alena Buchalcevová

Návrhový vzor Observer 5 Kurz 4 IT 115 cvičení ©Alena Buchalcevová Návrhový vzor Observer 5 Kurz 4 IT 115 cvičení ©Alena Buchalcevová

Projekt Prepinani. Barev. FX_Observer /1 6 Kurz 4 IT 115 cvičení ©Alena Buchalcevová Projekt Prepinani. Barev. FX_Observer /1 6 Kurz 4 IT 115 cvičení ©Alena Buchalcevová

Projekt Prepinani. Barev. FX_Observer /2 Výsledek programu s použitým observerem 7 Kurz 4 IT Projekt Prepinani. Barev. FX_Observer /2 Výsledek programu s použitým observerem 7 Kurz 4 IT 115 cvičení ©Alena Buchalcevová

Projekt Prepinani. Barev. FX_Observer /3 § v balíčku util jsou deklarována dvě rozhraní public Projekt Prepinani. Barev. FX_Observer /3 § v balíčku util jsou deklarována dvě rozhraní public interface Subjekt. Zmeny. Barvy { public void register. Observer(Observer. Pro. Barvy kdo. Se. Registruje); public void remove. Observer(Observer. Pro. Barvy kdo. Rusi. Registraci); public void notify. Observers(); public String get. Aktualni. Barva(); public String get. Aktualni. Style(); } public interface Observer. Pro. Barvy { public void update(); } 8 Kurz 4 IT 115 cvičení ©Alena Buchalcevová

Projekt Prepinani. Barev. FX_Observer /4 třída Seznam. Barev – je observerem 9 public class Projekt Prepinani. Barev. FX_Observer /4 třída Seznam. Barev – je observerem 9 public class Seznam. Barev implements Observer. Pro. Barvy{ private List. View barvy. List; private Observable. List barvy. Data; private Subjekt. Zmeny. Barvy subjekt ; public Seznam. Barev (Subjekt. Zmeny. Barvy subjekt) { this. subjekt = subjekt; subjekt. register. Observer(this); init(); } private void init() { barvy. List = new List. View<>(); barvy. Data = FXCollections. observable. Array. List(); barvy. List. set. Items(barvy. Data); barvy. List. set. Pref. Width(100); update(); } public List. View get. List() { return barvy. List; } @Override public void update() { barvy. Data. add(subjekt. get. Aktualni. Barva()); } } Musí se zaregistrovat k subjektu Přidá barvu do seznamu Kurz 4 IT 115 cvičení ©Alena Buchalcevová

Projekt Prepinani. Barev. FX_Observer /5 třída Dolni. Panel – je observerem public class Dolni. Projekt Prepinani. Barev. FX_Observer /5 třída Dolni. Panel – je observerem public class Dolni. Panel implements Observer. Pro. Barvy{ private Flow. Pane dolni. Flow. Pane; private Subjekt. Zmeny. Barvy subjekt; public Dolni. Panel(Subjekt. Zmeny. Barvy subjekt) { this. subjekt = subjekt; subjekt. register. Observer(this); init(); } private void init() { dolni. Flow. Pane = new Flow. Pane(); dolni. Flow. Pane. set. Pref. Height(100); update(); } public Flow. Pane get. Dolni. Panel() { return dolni. Flow. Pane; } 10 @Override public void update() { dolni. Flow. Pane. set. Style(subjekt. get. Aktualni. Style()); } Musí se zaregistrovat k subjektu Nastaví barvu pozadí } Kurz 4 IT 115 cvičení ©Alena Buchalcevová

Projekt Prepinani. Barev. FX_Observer /6 třída Prepinani. Barev. FX – je subjektem public class Projekt Prepinani. Barev. FX_Observer /6 třída Prepinani. Barev. FX – je subjektem public class Prepinani. Barev. FX extends Application implements Subjekt. Zmeny. Barvy { private List seznam. Observeru; seznam. Observeru = new Array. List(); . . cervena. Radio. B. set. On. Action(new Event. Handler() { @Override public void handle(Action. Event event) { aktualni. Style = "-fx-background-color: red; "; aktualni. Barva = "červená"; notify. Observers(); }); upozorní pozorovatele dolni. Panel = new Dolni. Panel(this); border. set. Bottom(dolni. Panel. get. Dolni. Panel()); seznam. Barev = new Seznam. Barev(this); border. set. Right(seznam. Barev. get. List()); 11 Kurz 4 IT 115 cvičení ©Alena Buchalcevová

Projekt Prepinani. Barev. FX_Observer /7 třída Prepinani. Barev. FX public void register. Observer(Observer. Pro. Projekt Prepinani. Barev. FX_Observer /7 třída Prepinani. Barev. FX public void register. Observer(Observer. Pro. Barvy kdo. Se. Registruje) { seznam. Observeru. add(kdo. Se. Registruje); } public void remove. Observer(Observer. Pro. Barvy kdo. Rusi. Registraci) { seznam. Observeru. remove(kdo. Rusi. Registraci); } public void notify. Observers() { for(Observer. Pro. Barvy obs: seznam. Observeru){ obs. update(); } } public String get. Aktualni. Barva() { return aktualni. Barva; } public String get. Aktualni. Style() { return aktualni. Style; } 12 Kurz 4 IT 115 cvičení ©Alena Buchalcevová