Na tych zajęciach będziemy tworzyli aplikację, która będzie składać się z 2 okien. Jedno będzie wpływać na działanie drugiego w sposób dynamiczny.
Lekcja 12
Na tych zajęciach będziemy tworzyli aplikację, która będzie składać się z 2 okien. Jedno będzie wpływać na działanie drugiego w sposób dynamiczny.
Pojedynczy obiekt, który jest dostępny w każdym miejscu projektu.
Jest postrzegany za antywzorzec.
Wielkie firmy (Google, RedHat etc.) często używają tego antywzorca, trudno się z nim nie spotkać.
Zwróć uwagę na pole statyczne oraz prywatny(!) konstruktor:
public class SlidesApplication {
private static SlidesApplication instance;
public static SlidesApplication getInstance() {
if (instance == null) {
instance = new SlidesApplication();
}
return instance;
}
private SlidesApplication() {
}
}
Klasa obrazuje byt pojedynczego slajdu:
public class Slide {
private String message;
private String title;
public Slide(String message, String title) {
this.message = message;
this.title = title;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
}
Rozwińmy główną klasę aplikacji:
public class SlidesApplication {
private static SlidesApplication instance;
private Map<String, Stage> stageMap;
private int currentSlide;
private List<Slide> slideData;
public static SlidesApplication getInstance() {
if (instance == null) {
instance = new SlidesApplication();
}
return instance;
}
private SlidesApplication() {
stageMap = new HashMap<>();
slideData = new ArrayList<>();
currentSlide = 0;
initSlidesData();
}
public void registerStage(String name, Stage stage) {
stageMap.put(name, stage);
}
public void loadScene(String stageName, Scene scene) {
Stage stage = stageMap.get(stageName);
stage.setScene(scene);
}
private void initSlidesData() {
slideData.add(new Slide("Podpowiedź dla prelegenta 0", "Slajd 0"));
slideData.add(new Slide("Podpowiedź dla prelegenta 1", "Slajd 1"));
slideData.add(new Slide("Podpowiedź dla prelegenta 2", "Slajd 2"));
}
public Scene renderScene() {
Slide current = slideData.get(currentSlide);
FXMLLoader loader = new FXMLLoader(getClass().getResource("/slide.fxml"));
SlideController controller = new SlideController(current);
loader.setController(controller);
try {
Pane pane = loader.load();
return new Scene(pane);
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
public void createSlideStage() {
Stage stage = new Stage();
stage.setTitle("SlideStage");
stage.setScene(renderScene());
stage.show();
registerStage("SlideStage", stage);
}
// TODO Zmienić index obecnego slajdu
// TODO Zwrócić scenę dla projektora slajdów
public Scene turnLeft() {
return null;
}
// TODO Analogicznie dla turnLeft(), ale w przeciwną stronę
public Scene turnRight() {
return null;
}
// TODO Musimy zwracać informację o podpowiedzi dla prelegenta
public String currentMessage() {
return null;
}
}
Przeanalizuj kod klasy SlidesApplication, a następnie uzupełnij kod brakujących metod.
Tym razem kodu jest za dużo, żeby kopiować kod ze strony do projektu, wklejam link do pobrania katalogu src projektu. Znajdą się tam dwie pary plików (.java + .fxml) dla dwóch okien.
Pobierz kod źródłowyUpewnij się, że nie mogą pojawić się żadne wyjątki w czasie testowania aplikacji.
Rozwiń projekt: