Diskuze: Javafx - metody formuláře k dispozici vývojáři
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.
Člen
Zobrazeno 6 zpráv z 6.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.
Ahoj, používám stejný způsob načítání více formulářů. Co jsem pochopil, tak Ty potřebuješ předat data do formuláře až po jeho načtení. Já to řeším tak, že v metodě setScreen volám vlastní metodu actionAfterShowScreen() kterou definuje interface ControlledScreen a implementuje ji každý kontroler. Tím mám zajištěno, že každý kontroler může reagovat na tuto metodu po svém. Jestli Ti to nebude jasný, tak přiložím i nějaké kódy...
Ahoj, prosím, kdybys mohl to částí kódu přiblížit, pomohlo by mi
to.
Není mi jasné, jak actionAfterShowScreen() pozdržet.
Cokoli přidám do setScreenParent proběhne předčasně.
Interface zatím vypadá takto:
public interface ControlledScreen {
public void setScreenParent(ScreensController screenPage);
// sem přidat actionAfterShowScreen() ??
}
Bude to trošku těžší. Potřebuješ si uchovávat v HashMapě jak načtený nody, tak reference na kontrolery. Nevím jak moc jsi ten kód studoval.
Metodu přidáváš správně do interfacu.
1. Jak jsem již řekl, v HashMapě musíš uchovávat referenci na načtený nod, tak referenci na kontroler. To se dá zařídit tak, že si udělaš nějakou malou třídu třeba A, která bude mít následující složení:
final class A{
public final Node node;
public final IControlledScreen controlledScreen;
public A(Node node, ControlledScreen controlledScreen) {
this.node = node;
this.controlledScreen = controlledScreen;
}
}
Dále upravíš typ HashMapy na následující:
private final HashMap<String, A> screens = new HashMap<>();
V metodě loadScreen voláš po každém načtení metodu addScreen, která přidává zatím jenom Nody do tý HashMapy. Upravíš metodu addScreen následujícím způsobem:
public void addScreen(String name, Node screen, ControlledScreen controller) {
screens.put(name, new A(screen, controller));
}
Dále upravíš volání metody addScreen takto:
addScreen(name, loadScreen, screen);
Tím máme zajištěno, že v HashMapě bude reference jak na Node tak na jeho kontroler.
Nyní se můžeme dostat k samotné metode setScreen:
Hned na začátek metody doporučuji si vytáhnout z mapy správnou referenci
takto:
final A a = screens.get(name);
Nakonec upravíme řádek
getChildren().add(0, screens.get(name));
na
getChildren().add(0, a.node);
Konečně se dostaneme k zavolání té metody actionAfterShowScreen tím, že pod výše uvedený řádek napíšeš toto:
a.controller.actionAfterShowScreen()
Vím, je toho opravdu hodně, snad tě to neodradí. Kdyby jsi tomu stále
nerozuměl, tak tě odkážu na můj git, kde mám celou tuhle featůru napsanou
a česky okomentovanou.
https://github.com/…troller.java
Kdyby cokoliv nebylo jasný, určitě se ozvi.
Jsem rad, že Ti to pomohlo. Už jsem se bál, že je ten kód moc složitý a nepochopitelný.
Zobrazeno 6 zpráv z 6.